Merge mozilla-central to mozilla-inbound r=merge a=merge on a CLOSED TREE
authorAndreea Pavel <apavel@mozilla.com>
Thu, 09 Nov 2017 22:17:00 +0200
changeset 695888 5fa0729021dccefb542e8703d45471e1c58e3d81
parent 695887 ee367696744a7af745f67019dec7c6d0275b2a24 (current diff)
parent 695787 277e2ae05f747e257eaa73e36f1bc31b98a21af9 (diff)
child 695889 4f8dcbc80a0c33e129463d4d351ada407165bf2d
push id88577
push usermozilla@noorenberghe.ca
push dateThu, 09 Nov 2017 23:43:51 +0000
reviewersmerge, merge
milestone58.0a1
Merge mozilla-central to mozilla-inbound r=merge a=merge on a CLOSED TREE
devtools/client/responsive.html/docs/browser-swap.md
docshell/base/nsDocShell.cpp
--- a/browser/app/blocklist.xml
+++ b/browser/app/blocklist.xml
@@ -956,20 +956,16 @@
     <emItem blockID="i598" id="{29b136c9-938d-4d3d-8df8-d649d9b74d02}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i108" id="{28bfb930-7620-11e1-b0c4-0800200c9a66}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
-    <emItem blockID="i446" id="{E90FA778-C2B7-41D0-9FA9-3FEC1CA54D66}">
-      <prefs/>
-      <versionRange minVersion="0" maxVersion="*" severity="1"/>
-    </emItem>
     <emItem blockID="i13" id="{E8E88AB0-7182-11DF-904E-6045E0D72085}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i226" id="{462be121-2b54-4218-bf00-b9bf8135b23f}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
@@ -1523,16 +1519,20 @@
     <emItem blockID="i856" id="/^({94d62e35-4b43-494c-bf52-ba5935df36ef}|firefox@advanceelite\.com|{bb7b7a60-f574-47c2-8a0b-4c56f2da9802})$/">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="3"/>
     </emItem>
     <emItem blockID="i520" id="/^({7316e43a-3ebd-4bb4-95c1-9caf6756c97f}|{0cc09160-108c-4759-bab1-5c12c216e005}|{ef03e721-f564-4333-a331-d4062cee6f2b}|{465fcfbb-47a4-4866-a5d5-d12f9a77da00}|{7557724b-30a9-42a4-98eb-77fcb0fd1be3}|{b7c7d4b0-7a84-4b73-a7ef-48ef59a52c3b})$/">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
+    <emItem blockID="f7569261-f575-4719-8202-552b20d013b0" id="{7e907a15-0a4c-4ff4-b64f-5eeb8f841349}">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="3"/>
+    </emItem>
     <emItem blockID="i8" id="{B13721C7-F507-4982-B2E5-502A71474FED}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
     <emItem blockID="i465" id="trtv3@trtv.com">
       <prefs/>
       <versionRange minVersion="0" maxVersion="*" severity="1"/>
     </emItem>
@@ -2134,16 +2134,20 @@
     <emItem blockID="i1056" id="{82AF8DCA-6DE9-405D-BD5E-43525BDAD38A}">
       <prefs/>
       <versionRange minVersion="0" maxVersion="7.5.0.9082" severity="1">
         <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
           <versionRange maxVersion="*" minVersion="43.0a1"/>
         </targetApplication>
       </versionRange>
     </emItem>
+    <emItem blockID="i446" id="{E90FA778-C2B7-41D0-9FA9-3FEC1CA54D66}">
+      <prefs/>
+      <versionRange minVersion="0" maxVersion="*" severity="1"/>
+    </emItem>
   </emItems>
   <pluginItems>
     <pluginItem blockID="p416">
       <match exp="JavaAppletPlugin\.plugin" name="filename"/>
       <versionRange maxVersion="Java 6 Update 45" minVersion="Java 6 Update 42" severity="0" vulnerabilitystatus="1">
         <targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
           <versionRange maxVersion="*" minVersion="17.0"/>
         </targetApplication>
--- a/browser/base/content/test/performance/browser.ini
+++ b/browser/base/content/test/performance/browser.ini
@@ -14,12 +14,11 @@ skip-if = !e10s
 [browser_tabopen_reflows.js]
 [browser_tabopen_squeeze_reflows.js]
 [browser_tabstrip_overflow_underflow_reflows.js]
 [browser_tabswitch_reflows.js]
 [browser_toolbariconcolor_restyles.js]
 [browser_urlbar_keyed_search_reflows.js]
 skip-if = (os == 'linux') || (os == 'win' && debug) # Disabled on Linux and Windows debug due to perma failures. Bug 1392320.
 [browser_urlbar_search_reflows.js]
-skip-if = (os == 'linux') # Disabled on Linux and OS X opt due to frequent failures. Bug 1385932
 [browser_windowclose_reflows.js]
 [browser_windowopen_reflows.js]
 skip-if = os == 'linux' # Disabled due to frequent failures. Bug 1380465.
--- a/browser/base/content/test/performance/browser_urlbar_keyed_search_reflows.js
+++ b/browser/base/content/test/performance/browser_urlbar_keyed_search_reflows.js
@@ -40,16 +40,17 @@ const EXPECTED_REFLOWS_FIRST_OPEN = [
     times: 5, // This number should only ever go down - never up.
   },
 
   {
     stack: [
       "adjustHeight@chrome://global/content/bindings/autocomplete.xml",
       "_invalidate/this._adjustHeightTimeout<@chrome://global/content/bindings/autocomplete.xml",
     ],
+    minTimes: 39, // This number should only ever go down - never up.
     times: 51, // This number should only ever go down - never up.
   },
 
   {
     stack: [
       "_handleOverflow@chrome://global/content/bindings/autocomplete.xml",
       "handleOverUnderflow@chrome://global/content/bindings/autocomplete.xml",
       "_reuseAcItem@chrome://global/content/bindings/autocomplete.xml",
--- a/browser/base/content/test/performance/browser_urlbar_search_reflows.js
+++ b/browser/base/content/test/performance/browser_urlbar_search_reflows.js
@@ -52,17 +52,17 @@ const EXPECTED_REFLOWS_FIRST_OPEN = [
     stack: [
       "_handleOverflow@chrome://global/content/bindings/autocomplete.xml",
       "handleOverUnderflow@chrome://global/content/bindings/autocomplete.xml",
       "_reuseAcItem@chrome://global/content/bindings/autocomplete.xml",
       "_appendCurrentResult@chrome://global/content/bindings/autocomplete.xml",
       "_invalidate@chrome://global/content/bindings/autocomplete.xml",
       "invalidate@chrome://global/content/bindings/autocomplete.xml"
     ],
-    times: 60, // This number should only ever go down - never up.
+    times: 36, // This number should only ever go down - never up.
   },
 
   {
     stack: [
       "_handleOverflow@chrome://global/content/bindings/autocomplete.xml",
       "handleOverUnderflow@chrome://global/content/bindings/autocomplete.xml",
       "_openAutocompletePopup@chrome://browser/content/urlbarBindings.xml",
       "openAutocompletePopup@chrome://browser/content/urlbarBindings.xml",
@@ -97,16 +97,28 @@ const EXPECTED_REFLOWS_SECOND_OPEN = [
   {
     stack: [
       "adjustHeight@chrome://global/content/bindings/autocomplete.xml",
       "_invalidate/this._adjustHeightTimeout<@chrome://global/content/bindings/autocomplete.xml",
     ],
     times: 3, // This number should only ever go down - never up.
   },
 
+  {
+    stack: [
+      "_handleOverflow@chrome://global/content/bindings/autocomplete.xml",
+      "handleOverUnderflow@chrome://global/content/bindings/autocomplete.xml",
+      "_reuseAcItem@chrome://global/content/bindings/autocomplete.xml",
+      "_appendCurrentResult@chrome://global/content/bindings/autocomplete.xml",
+      "_invalidate@chrome://global/content/bindings/autocomplete.xml",
+      "invalidate@chrome://global/content/bindings/autocomplete.xml"
+    ],
+    times: 24, // This number should only ever go down - never up.
+  },
+
   // Bug 1359989
   {
     stack: [
       "openPopup@chrome://global/content/bindings/popup.xml",
       "_openAutocompletePopup@chrome://browser/content/urlbarBindings.xml",
       "openAutocompletePopup@chrome://browser/content/urlbarBindings.xml",
       "openPopup@chrome://global/content/bindings/autocomplete.xml",
       "set_popupOpen@chrome://global/content/bindings/autocomplete.xml",
--- a/browser/base/content/test/urlbar/browser_urlbarOneOffs.js
+++ b/browser/base/content/test/urlbar/browser_urlbarOneOffs.js
@@ -31,16 +31,17 @@ add_task(async function init() {
 });
 
 // Keys up and down through the history panel, i.e., the panel that's shown when
 // there's no text in the textbox.
 add_task(async function history() {
   gURLBar.focus();
   EventUtils.synthesizeKey("VK_DOWN", {});
   await promisePopupShown(gURLBar.popup);
+  await waitForAutocompleteResultAt(gMaxResults - 1)
 
   assertState(-1, -1, "");
 
   // Key down through each result.
   for (let i = 0; i < gMaxResults; i++) {
     EventUtils.synthesizeKey("VK_DOWN", {});
     assertState(i, -1,
       "example.com/browser_urlbarOneOffs.js/?" + (gMaxResults - i - 1));
@@ -101,17 +102,17 @@ add_task(async function history() {
 
 // Keys up and down through the non-history panel, i.e., the panel that's shown
 // when you type something in the textbox.
 add_task(async function() {
   // Use a typed value that returns the visits added above but that doesn't
   // trigger autofill since that would complicate the test.
   let typedValue = "browser_urlbarOneOffs";
   await promiseAutocompleteResultPopup(typedValue, window, true);
-
+  await waitForAutocompleteResultAt(gMaxResults - 1);
   assertState(0, -1, typedValue);
 
   // Key down through each result.  The first result is already selected, which
   // is why gMaxResults - 1 is the correct number of times to do this.
   for (let i = 0; i < gMaxResults - 1; i++) {
     EventUtils.synthesizeKey("VK_DOWN", {});
     // i starts at zero so that the textValue passed to assertState is correct.
     // But that means that i + 1 is the expected selected index, since initially
@@ -153,17 +154,17 @@ add_task(async function() {
   await hidePopup();
 });
 
 // Checks that "Search with Current Search Engine" items are updated to "Search
 // with One-Off Engine" when a one-off is selected.
 add_task(async function searchWith() {
   let typedValue = "foo";
   await promiseAutocompleteResultPopup(typedValue);
-
+  await waitForAutocompleteResultAt(0);
   assertState(0, -1, typedValue);
 
   let item = gURLBar.popup.richlistbox.firstChild;
   Assert.equal(item._actionText.textContent,
                "Search with " + Services.search.currentEngine.name,
                "Sanity check: first result's action text");
 
   // Alt+Down to the first one-off.  Now the first result and the first one-off
@@ -185,17 +186,17 @@ add_task(async function searchWith() {
 // Clicks a one-off.
 add_task(async function oneOffClick() {
   gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
 
   // We are explicitly using something that looks like a url, to make the test
   // stricter. Even if it looks like a url, we should search.
   let typedValue = "foo.bar";
   await promiseAutocompleteResultPopup(typedValue);
-
+  await waitForAutocompleteResultAt(1);
   assertState(0, -1, typedValue);
 
   let oneOffs = gURLBar.popup.oneOffSearchButtons.getSelectableButtons(true);
   let resultsPromise =
     BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser, false,
                                    "http://mochi.test:8888/?terms=foo.bar");
   EventUtils.synthesizeMouseAtCenter(oneOffs[0], {});
   await resultsPromise;
@@ -206,17 +207,17 @@ add_task(async function oneOffClick() {
 // Presses the Return key when a one-off is selected.
 add_task(async function oneOffReturn() {
   gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
 
   // We are explicitly using something that looks like a url, to make the test
   // stricter. Even if it looks like a url, we should search.
   let typedValue = "foo.bar";
   await promiseAutocompleteResultPopup(typedValue, window, true);
-
+  await waitForAutocompleteResultAt(1);
   assertState(0, -1, typedValue);
 
   // Alt+Down to select the first one-off.
   EventUtils.synthesizeKey("VK_DOWN", { altKey: true });
   assertState(0, 0, typedValue);
 
   let resultsPromise =
     BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser, false,
--- a/browser/base/content/test/urlbar/head.js
+++ b/browser/base/content/test/urlbar/head.js
@@ -315,10 +315,12 @@ function promiseSpeculativeConnection(ht
 }
 
 async function waitForAutocompleteResultAt(index) {
   let searchString = gURLBar.controller.searchString;
   await BrowserTestUtils.waitForCondition(
     () => gURLBar.popup.richlistbox.children.length > index &&
           gURLBar.popup.richlistbox.children[index].getAttribute("ac-text") == searchString,
     `Waiting for the autocomplete result for "${searchString}" at [${index}] to appear`);
+  // Ensure the addition is complete, for proper mouse events on the entries.
+  await new Promise(resolve => window.requestIdleCallback(resolve, {timeout: 1000}));
   return gURLBar.popup.richlistbox.children[index];
 }
--- a/browser/components/extensions/ext-browser.js
+++ b/browser/components/extensions/ext-browser.js
@@ -30,17 +30,18 @@ let windowTracker;
 const getSender = (extension, target, sender) => {
   let tabId;
   if ("tabId" in sender) {
     // The message came from a privileged extension page running in a tab. In
     // that case, it should include a tabId property (which is filled in by the
     // page-open listener below).
     tabId = sender.tabId;
     delete sender.tabId;
-  } else if (target instanceof Ci.nsIDOMXULElement) {
+  } else if (target instanceof Ci.nsIDOMXULElement ||
+             ExtensionUtils.instanceOf(target, "HTMLIFrameElement")) {
     tabId = tabTracker.getBrowserData(target).tabId;
   }
 
   if (tabId) {
     let tab = extension.tabManager.get(tabId, null);
     if (tab) {
       sender.tab = tab.convert();
     }
--- a/browser/components/extensions/test/browser/browser_ext_omnibox.js
+++ b/browser/components/extensions/test/browser/browser_ext_omnibox.js
@@ -79,31 +79,45 @@ add_task(async function() {
         `Expected "${event}" to have fired with text: "${expected.text}".`);
     }
     if (expected.disposition) {
       is(actual.disposition, expected.disposition,
         `Expected "${event}" to have fired with disposition: "${expected.disposition}".`);
     }
   }
 
-  async function startInputSession() {
+  async function waitForAutocompleteResultAt(index) {
+    let searchString = gURLBar.controller.searchString;
+    await BrowserTestUtils.waitForCondition(
+      () => gURLBar.popup.richlistbox.children.length > index &&
+            gURLBar.popup.richlistbox.children[index].getAttribute("ac-text") == searchString,
+      `Waiting for the autocomplete result for "${searchString}" at [${index}] to appear`);
+    // Ensure the addition is complete, for proper mouse events on the entries.
+    await new Promise(resolve => window.requestIdleCallback(resolve, {timeout: 1000}));
+    return gURLBar.popup.richlistbox.children[index];
+  }
+
+  let inputSessionSerial = 0;
+  async function startInputSession(indexToWaitFor) {
     gURLBar.focus();
     gURLBar.value = keyword;
     EventUtils.synthesizeKey(" ", {});
     await expectEvent("on-input-started-fired");
-    EventUtils.synthesizeKey("t", {});
-    await expectEvent("on-input-changed-fired", {text: "t"});
+    // Always use a different input at every invokation, so that
+    // waitForAutocompleteResultAt can distinguish different cases.
+    let char = ((inputSessionSerial++) % 10).toString();
+    EventUtils.synthesizeKey(char, {});
+
+    await expectEvent("on-input-changed-fired", {text: char});
     // Wait for the autocomplete search. Note that we cannot wait for the search
     // to be complete, since the add-on doesn't communicate when it's done, so
     // just check matches count.
-    await BrowserTestUtils.waitForCondition(
-      () => gURLBar.controller.matchCount >= 2 &&
-            gURLBar.popup.richlistbox.children[1].getAttribute("ac-text") == gURLBar.controller.searchString,
-      "waiting urlbar search to complete");
-    return "t";
+    await waitForAutocompleteResultAt(indexToWaitFor);
+
+    return char;
   }
 
   async function testInputEvents() {
     gURLBar.focus();
 
     // Start an input session by typing in <keyword><space>.
     for (let letter of keyword) {
       EventUtils.synthesizeKey(letter, {});
@@ -169,17 +183,17 @@ add_task(async function() {
       extension.sendMessage("set-default-suggestion", {
         suggestion: {
           description: expectedText,
         },
       });
       await extension.awaitMessage("default-suggestion-set");
     }
 
-    let text = await startInputSession();
+    let text = await startInputSession(0);
 
     let item = gURLBar.popup.richlistbox.children[0];
 
     is(item.getAttribute("title"), expectedText,
       `Expected heuristic result to have title: "${expectedText}".`);
 
     is(item.getAttribute("displayurl"), `${keyword} ${text}`,
       `Expected heuristic result to have displayurl: "${keyword} ${text}".`);
@@ -188,17 +202,17 @@ add_task(async function() {
 
     await expectEvent("on-input-entered-fired", {
       text,
       disposition: "currentTab",
     });
   }
 
   async function testDisposition(suggestionIndex, expectedDisposition, expectedText) {
-    await startInputSession();
+    await startInputSession(suggestionIndex);
 
     // Select the suggestion.
     for (let i = 0; i < suggestionIndex; i++) {
       EventUtils.synthesizeKey("VK_DOWN", {});
     }
 
     let item = gURLBar.popup.richlistbox.children[suggestionIndex];
     if (expectedDisposition == "currentTab") {
@@ -224,17 +238,17 @@ add_task(async function() {
       ok(!!item, "Expected item to exist");
       is(item.getAttribute("title"), description,
         `Expected suggestion to have title: "${description}".`);
 
       is(item.getAttribute("displayurl"), `${keyword} ${content}`,
         `Expected suggestion to have displayurl: "${keyword} ${content}".`);
     }
 
-    let text = await startInputSession();
+    let text = await startInputSession(info.suggestions.length - 1);
 
     extension.sendMessage(info.test);
     await extension.awaitMessage("test-ready");
 
     info.suggestions.forEach(expectSuggestion);
 
     EventUtils.synthesizeMouseAtCenter(gURLBar.popup.richlistbox.children[0], {});
     await expectEvent("on-input-entered-fired", {
@@ -269,22 +283,20 @@ add_task(async function() {
   await testDisposition(3, "newBackgroundTab", suggestions[2].content);
 
   extension.sendMessage("set-suggestions", {suggestions});
   await extension.awaitMessage("suggestions-set");
 
   // Test adding suggestions asynchronously.
   await testSuggestions({
     test: "test-multiple-suggest-calls",
-    skipHeuristic: true,
     suggestions,
   });
   await testSuggestions({
     test: "test-suggestions-after-delay",
-    skipHeuristic: true,
     suggestions,
   });
 
   // Start monitoring the console.
   let waitForConsole = new Promise(resolve => {
     SimpleTest.monitorConsole(resolve, [{
       message: new RegExp(`The keyword provided is already registered: "${keyword}"`),
     }]);
--- a/browser/components/extensions/test/browser/browser_ext_tabs_lastAccessed.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_lastAccessed.js
@@ -1,37 +1,37 @@
 "use strict";
 
 add_task(async function testLastAccessed() {
   let past = Date.now();
 
-  await BrowserTestUtils.openNewForegroundTab(gBrowser, "https://example.com/?1");
-  await BrowserTestUtils.openNewForegroundTab(gBrowser, "https://example.com/?2");
+  for (let url of ["https://example.com/?1", "https://example.com/?2"]) {
+    let tab = BrowserTestUtils.addTab(gBrowser, url, {skipAnimation: true});
+    await BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, url);
+  }
 
   let extension = ExtensionTestUtils.loadExtension({
     manifest: {
       permissions: ["tabs"],
     },
     async background() {
       browser.test.onMessage.addListener(async function(msg, past) {
-        if (msg !== "past") {
-          return;
-        }
-
         let [tab1] = await browser.tabs.query({url: "https://example.com/?1"});
         let [tab2] = await browser.tabs.query({url: "https://example.com/?2"});
 
         browser.test.assertTrue(tab1 && tab2, "Expected tabs were found");
 
         let now = Date.now();
 
-        browser.test.assertTrue(past < tab1.lastAccessed &&
-                                tab1.lastAccessed < tab2.lastAccessed &&
-                                tab2.lastAccessed <= now,
-                                "lastAccessed timestamps are recent and in the right order");
+        browser.test.assertTrue(past < tab1.lastAccessed,
+                                "lastAccessed of tab 1 is later than the test start time.");
+        browser.test.assertTrue(tab1.lastAccessed < tab2.lastAccessed,
+                                "lastAccessed of tab 2 is later than lastAccessed of tab 1.");
+        browser.test.assertTrue(tab2.lastAccessed <= now,
+                                "lastAccessed of tab 2 is earlier than now.");
 
         await browser.tabs.remove([tab1.id, tab2.id]);
 
         browser.test.notifyPass("tabs.lastAccessed");
       });
     },
   });
 
--- a/devtools/client/locales/en-US/netmonitor.properties
+++ b/devtools/client/locales/en-US/netmonitor.properties
@@ -316,17 +316,23 @@ charts.cacheDisabled=Empty cache
 # LOCALIZATION NOTE (charts.totalSize): This is the label displayed
 # in the performance analysis view for total requests size, in kilobytes.
 charts.totalSize=Size: %S KB
 
 # LOCALIZATION NOTE (charts.totalSeconds): Semi-colon list of plural forms.
 # See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
 # This is the label displayed in the performance analysis view for the
 # total requests time, in seconds.
-charts.totalSeconds=Time: #1 second;Time: #1 seconds
+charts.totalSeconds=Time: %1$S second;Time: %1$S seconds
+
+# LOCALIZATION NOTE (charts.totalSecondsNonBlocking): Semi-colon list of plural forms.
+# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
+# This is the label displayed in the performance analysis view for the
+# total requests time (non-blocking), in seconds.
+charts.totalSecondsNonBlocking=Non blocking time: %1$S second;Non blocking time: %1$S seconds
 
 # LOCALIZATION NOTE (charts.totalCached): This is the label displayed
 # in the performance analysis view for total cached responses.
 charts.totalCached=Cached responses: %S
 
 # LOCALIZATION NOTE (charts.totalCount): This is the label displayed
 # in the performance analysis view for total requests.
 charts.totalCount=Total requests: %S
@@ -343,16 +349,21 @@ charts.type=Type
 # in the header column in the performance analysis view for transferred
 # size of the request.
 charts.transferred=Transferred
 
 # LOCALIZATION NOTE (charts.totalCount): This is the label displayed
 # in the header column in the performance analysis view for time of request.
 charts.time=Time
 
+# LOCALIZATION NOTE (charts.nonBlockingTime): This is the label displayed
+# in the header column in the performance analysis view for non blocking
+# time of request.
+charts.nonBlockingTime=Non blocking time
+
 # LOCALIZATION NOTE (netRequest.headers): A label used for Headers tab
 # This tab displays list of HTTP headers
 netRequest.headers=Headers
 
 # LOCALIZATION NOTE (netRequest.response): A label used for Response tab
 # This tab displays HTTP response body
 netRequest.response=Response
 
--- a/devtools/client/netmonitor/src/components/StatisticsPanel.js
+++ b/devtools/client/netmonitor/src/components/StatisticsPanel.js
@@ -127,40 +127,49 @@ class StatisticsPanel extends Component 
       title,
       header: {
         cached: "",
         count: "",
         label: L10N.getStr("charts.type"),
         size: L10N.getStr("charts.size"),
         transferredSize: L10N.getStr("charts.transferred"),
         time: L10N.getStr("charts.time"),
+        nonBlockingTime: L10N.getStr("charts.nonBlockingTime"),
       },
       data,
       strings: {
         size: (value) =>
           L10N.getFormatStr("charts.sizeKB", getSizeWithDecimals(value / 1024)),
         transferredSize: (value) =>
           L10N.getFormatStr("charts.transferredSizeKB",
             getSizeWithDecimals(value / 1024)),
         time: (value) =>
           L10N.getFormatStr("charts.totalS", getTimeWithDecimals(value / 1000)),
+        nonBlockingTime: (value) =>
+          L10N.getFormatStr("charts.totalS", getTimeWithDecimals(value / 1000)),
       },
       totals: {
         cached: (total) => L10N.getFormatStr("charts.totalCached", total),
         count: (total) => L10N.getFormatStr("charts.totalCount", total),
         size: (total) =>
           L10N.getFormatStr("charts.totalSize", getSizeWithDecimals(total / 1024)),
         transferredSize: total =>
           L10N.getFormatStr("charts.totalTransferredSize",
             getSizeWithDecimals(total / 1024)),
         time: (total) => {
           let seconds = total / 1000;
           let string = getTimeWithDecimals(seconds);
           return PluralForm.get(seconds,
-            L10N.getStr("charts.totalSeconds")).replace("#1", string);
+            L10N.getFormatStr("charts.totalSeconds", string));
+        },
+        nonBlockingTime: (total) => {
+          let seconds = total / 1000;
+          let string = getTimeWithDecimals(seconds);
+          return PluralForm.get(seconds,
+            L10N.getFormatStr("charts.totalSecondsNonBlocking", string));
         },
       },
       sorted: true,
     });
 
     chart.on("click", (_, { label }) => {
       // Reset FilterButtons and enable one filter exclusively
       this.props.closeStatistics();
@@ -180,16 +189,17 @@ class StatisticsPanel extends Component 
   sanitizeChartDataSource(requests, emptyCache) {
     const data = FILTER_TAGS.map((type) => ({
       cached: 0,
       count: 0,
       label: type,
       size: 0,
       transferredSize: 0,
       time: 0,
+      nonBlockingTime: 0,
     }));
 
     for (let request of requests) {
       let type;
 
       if (Filters.html(request)) {
         // "html"
         type = 0;
@@ -219,16 +229,19 @@ class StatisticsPanel extends Component 
         // "other"
         type = 8;
       }
 
       if (emptyCache || !this.responseIsFresh(request)) {
         data[type].time += request.totalTime || 0;
         data[type].size += request.contentSize || 0;
         data[type].transferredSize += request.transferredSize || 0;
+        let nonBlockingTime =
+           request.eventTimings.totalTime - request.eventTimings.timings.blocked;
+        data[type].nonBlockingTime += nonBlockingTime || 0;
       } else {
         data[type].cached++;
       }
       data[type].count++;
     }
 
     return data.filter(e => e.count > 0);
   }
--- a/devtools/client/responsive.html/browser/swap.js
+++ b/devtools/client/responsive.html/browser/swap.js
@@ -17,19 +17,16 @@ function debug(msg) {
  * page.  Page state is preserved by using `swapFrameLoaders`, just like when
  * you move a tab to a new window.  This provides a seamless transition for the
  * user since the page is not reloaded.
  *
  * See /devtools/docs/responsive-design-mode.md for a high level overview of how
  * this is used in RDM.  The steps described there are copied into the code
  * below.
  *
- * For additional low level details about swapping browser content,
- * see /devtools/client/responsive.html/docs/browser-swap.md.
- *
  * @param tab
  *        A browser tab with content to be swapped.
  * @param containerURL
  *        URL to a page that holds an inner browser.
  * @param getInnerBrowser
  *        Function that returns a Promise to the inner browser within the
  *        container page.  It is called with the outer browser that loaded the
  *        container page.
--- a/devtools/client/responsive.html/browser/tunnel.js
+++ b/devtools/client/responsive.html/browser/tunnel.js
@@ -1,32 +1,31 @@
 /* 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/. */
 
 "use strict";
 
-const { Ci } = require("chrome");
+const { Ci, Cu } = require("chrome");
 const Services = require("Services");
 const { Task } = require("devtools/shared/task");
 const { BrowserElementWebNavigation } = require("./web-navigation");
 const { getStack } = require("devtools/shared/platform/stack");
 
 // A symbol used to hold onto the frame loader from the outer browser while tunneling.
 const FRAME_LOADER = Symbol("devtools/responsive/frame-loader");
 // Export for use in tests.
 exports.OUTER_FRAME_LOADER_SYMBOL = FRAME_LOADER;
 
 function debug(msg) {
   // console.log(msg);
 }
 
 /**
- * Properties swapped between browsers by browser.xml's `swapDocShells`.  See also the
- * list at /devtools/client/responsive.html/docs/browser-swap.md.
+ * Properties swapped between browsers by browser.xml's `swapDocShells`.
  */
 const SWAPPED_BROWSER_STATE = [
   "_remoteFinder",
   "_securityUI",
   "_documentURI",
   "_documentContentType",
   "_contentTitle",
   "_characterSet",
@@ -323,18 +322,18 @@ exports.tunnelToInnerBrowser = tunnelToI
  * This module allows specific messages of interest to be directed from the
  * outer browser to the inner browser (and vice versa) in a targetted fashion
  * without having to touch the original code paths that use them.
  */
 function MessageManagerTunnel(outer, inner) {
   if (outer.isRemoteBrowser) {
     throw new Error("The outer browser must be non-remote.");
   }
-  this.outer = outer;
-  this.inner = inner;
+  this.outerRef = Cu.getWeakReference(outer);
+  this.innerRef = Cu.getWeakReference(inner);
   this.tunneledMessageNames = new Set();
   this.init();
 }
 
 MessageManagerTunnel.prototype = {
 
   /**
    * Most message manager methods are left alone and are just passed along to
@@ -410,16 +409,18 @@ MessageManagerTunnel.prototype = {
     // Messages sent from DevTools
     "debug:",
     // Messages sent from findbar.xml
     "Findbar:",
     // Messages sent from RemoteFinder.jsm
     "Finder:",
     // Messages sent from InlineSpellChecker.jsm
     "InlineSpellChecker:",
+    // Messages sent from MessageChannel.jsm
+    "MessageChannel:",
     // Messages sent from pageinfo.js
     "PageInfo:",
     // Messages sent from printUtils.js
     "Printing:",
     "PageMetadata:",
     // Messages sent from viewSourceUtils.js
     "ViewSource:",
   ],
@@ -428,46 +429,56 @@ MessageManagerTunnel.prototype = {
     // Messages sent to nsContextMenu.js
     "ContextMenu:",
     // Messages sent to DevTools
     "debug:",
     // Messages sent to findbar.xml
     "Findbar:",
     // Messages sent to RemoteFinder.jsm
     "Finder:",
+    // Messages sent to MessageChannel.jsm
+    "MessageChannel:",
     // Messages sent to pageinfo.js
     "PageInfo:",
     // Messages sent to printUtils.js
     "Printing:",
     "PageMetadata:",
     // Messages sent to viewSourceUtils.js
     "ViewSource:",
   ],
 
   OUTER_TO_INNER_FRAME_SCRIPTS: [
     // DevTools server for OOP frames
     "resource://devtools/server/child.js"
   ],
 
+  get outer() {
+    return this.outerRef.get();
+  },
+
   get outerParentMM() {
     if (!this.outer[FRAME_LOADER]) {
       return null;
     }
     return this.outer[FRAME_LOADER].messageManager;
   },
 
   get outerChildMM() {
     // This is only possible because we require the outer browser to be
     // non-remote, so we're able to reach into its window and use the child
     // side message manager there.
     let docShell = this.outer[FRAME_LOADER].docShell;
     return docShell.QueryInterface(Ci.nsIInterfaceRequestor)
                    .getInterface(Ci.nsIContentFrameMessageManager);
   },
 
+  get inner() {
+    return this.innerRef.get();
+  },
+
   get innerParentMM() {
     if (!this.inner.frameLoader) {
       return null;
     }
     return this.inner.frameLoader.messageManager;
   },
 
   init() {
@@ -615,9 +626,13 @@ MessageManagerTunnel.prototype = {
            this.OUTER_TO_INNER_MESSAGE_PREFIXES.some(prefix => name.startsWith(prefix));
   },
 
   _shouldTunnelInnerToOuter(name) {
     return this.INNER_TO_OUTER_MESSAGES.includes(name) ||
            this.INNER_TO_OUTER_MESSAGE_PREFIXES.some(prefix => name.startsWith(prefix));
   },
 
+  toString() {
+    return "[object MessageManagerTunnel]";
+  },
+
 };
deleted file mode 100644
--- a/devtools/client/responsive.html/docs/browser-swap.md
+++ /dev/null
@@ -1,144 +0,0 @@
-# Overview
-
-The RDM tool uses several forms of tab and browser swapping to integrate the
-tool UI cleanly into the browser UI.  The high level steps of this process are
-documented at `/devtools/docs/responsive-design-mode.md`.
-
-This document contains a random assortment of low level notes about the steps
-the browser goes through when swapping browsers between tabs.
-
-# Connections between Browsers and Tabs
-
-Link between tab and browser (`gBrowser._linkBrowserToTab`):
-
-```
-aTab.linkedBrowser = browser;
-gBrowser._tabForBrowser.set(browser, aTab);
-```
-
-# Swapping Browsers between Tabs
-
-## Legend
-
-* (R): remote browsers only
-* (!R): non-remote browsers only
-
-## Functions Called
-
-When you call `gBrowser.swapBrowsersAndCloseOther` to move tab content from a
-browser in one tab to a browser in another tab, here are all the code paths
-involved:
-
-* `gBrowser.swapBrowsersAndCloseOther`
-  * `gBrowser._beginRemoveTab`
-    * `gBrowser.tabContainer.updateVisibility`
-    * Emit `TabClose`
-    * `browser.webProgress.removeProgressListener`
-    * `filter.removeProgressListener`
-    * `listener.destroy`
-  * `gBrowser._swapBrowserDocShells`
-    * `ourBrowser.webProgress.removeProgressListener`
-    * `filter.removeProgressListener`
-    * `gBrowser._swapRegisteredOpenURIs`
-    * `ourBrowser.swapDocShells(aOtherBrowser)`
-      * Emit `SwapDocShells`
-      * `PopupNotifications._swapBrowserNotifications`
-      * `browser.detachFormFill` (!R)
-      * `browser.swapFrameLoaders`
-      * `browser.attachFormFill` (!R)
-      * `browser._remoteWebNavigationImpl.swapBrowser(browser)` (R)
-      * `browser._remoteWebProgressManager.swapBrowser(browser)` (R)
-      * `browser._remoteFinder.swapBrowser(browser)` (R)
-      * Emit `EndSwapDocShells`
-    * `gBrowser.mTabProgressListener`
-    * `filter.addProgressListener`
-    * `ourBrowser.webProgress.addProgressListener`
-  * `gBrowser._endRemoveTab`
-    * `gBrowser._blurTab`
-    * `gBrowser._tabFilters.delete`
-    * `gBrowser._tabListeners.delete`
-    * `gBrowser._outerWindowIDBrowserMap.delete`
-    * `browser.destroy`
-    * `gBrowser.tabContainer.removeChild`
-    * `gBrowser.tabContainer.adjustTabstrip`
-    * `gBrowser.tabContainer._setPositionalAttributes`
-    * `browser.parentNode.removeChild(browser)`
-    * `gBrowser._tabForBrowser.delete`
-    * `gBrowser.mPanelContainer.removeChild`
-  * `gBrowser.setTabTitle` / `gBrowser.setTabTitleLoading`
-    * `browser.currentURI.spec`
-    * `gBrowser._tabAttrModified`
-    * `gBrowser.updateTitlebar`
-  * `gBrowser.updateCurrentBrowser`
-    * `browser.docShellIsActive` (!R)
-    * `gBrowser.showTab`
-    * `gBrowser._appendStatusPanel`
-    * `gBrowser._callProgressListeners` with `onLocationChange`
-    * `gBrowser._callProgressListeners` with `onSecurityChange`
-    * `gBrowser._callProgressListeners` with `onUpdateCurrentBrowser`
-    * `gBrowser.updateTitlebar`
-    * `gBrowser._callProgressListeners` with `onStateChange`
-    * `gBrowser._setCloseKeyState`
-    * Emit `TabSelect`
-    * `gBrowser._tabAttrModified`
-    * `browser.getInPermitUnload`
-    * `gBrowser.tabContainer._setPositionalAttributes`
-  * `gBrowser._tabAttrModified`
-
-## Browser State
-
-When calling `gBrowser.swapBrowsersAndCloseOther`, the browser is not actually
-moved from one tab to the other.  Instead, various properties _on_ each of the
-browsers are swapped.
-
-Browser attributes `gBrowser.swapBrowsersAndCloseOther` transfers between
-browsers:
-
-* `usercontextid`
-
-Tab attributes `gBrowser.swapBrowsersAndCloseOther` transfers between tabs:
-
-* `usercontextid`
-* `muted`
-* `soundplaying`
-* `busy`
-
-Browser properties `gBrowser.swapBrowsersAndCloseOther` transfers between
-browsers:
-
-* `mIconURL`
-* `getFindBar(aOurTab)._findField.value`
-
-Browser properties `gBrowser._swapBrowserDocShells` transfers between browsers:
-
-* `outerWindowID` in `gBrowser._outerWindowIDBrowserMap`
-* `_outerWindowID` on the browser (R)
-* `docShellIsActive`
-* `permanentKey`
-* `registeredOpenURI`
-
-Browser properties `browser.swapDocShells` transfers between browsers:
-
-* `_docShell`
-* `_webBrowserFind`
-* `_contentWindow`
-* `_webNavigation`
-* `_remoteWebNavigation` (R)
-* `_remoteWebNavigationImpl` (R)
-* `_remoteWebProgressManager` (R)
-* `_remoteWebProgress` (R)
-* `_remoteFinder` (R)
-* `_securityUI` (R)
-* `_documentURI` (R)
-* `_documentContentType` (R)
-* `_contentTitle` (R)
-* `_characterSet` (R)
-* `_contentPrincipal` (R)
-* `_imageDocument` (R)
-* `_fullZoom` (R)
-* `_textZoom` (R)
-* `_isSyntheticDocument` (R)
-* `_innerWindowID` (R)
-* `_manifestURI` (R)
-
-`browser.swapFrameLoaders` swaps the actual page content.
--- a/devtools/client/responsive.html/test/browser/browser.ini
+++ b/devtools/client/responsive.html/test/browser/browser.ini
@@ -22,27 +22,29 @@ support-files =
 [browser_device_custom_remove.js]
 [browser_device_custom.js]
 [browser_device_modal_error.js]
 [browser_device_modal_exit.js]
 [browser_device_modal_submit.js]
 [browser_device_width.js]
 [browser_dpr_change.js]
 [browser_exit_button.js]
+[browser_ext_messaging.js]
+tags = devtools webextensions
 [browser_frame_script_active.js]
 [browser_hide_container.js]
 [browser_menu_item_01.js]
 [browser_menu_item_02.js]
 [browser_mouse_resize.js]
 [browser_navigation.js]
 skip-if = true # Bug 1413765
 [browser_network_throttling.js]
 [browser_page_state.js]
 [browser_permission_doorhanger.js]
-tags = geolocation
+tags = devtools geolocation
 skip-if = true # Bug 1413765
 [browser_resize_cmd.js]
 [browser_screenshot_button.js]
 [browser_tab_close.js]
 [browser_tab_remoteness_change.js]
 [browser_target_blank.js]
 [browser_toolbox_computed_view.js]
 [browser_toolbox_rule_view.js]
new file mode 100644
--- /dev/null
+++ b/devtools/client/responsive.html/test/browser/browser_ext_messaging.js
@@ -0,0 +1,129 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/* eslint-env webextensions */
+
+"use strict";
+
+const TEST_URL = "http://example.com/";
+
+// These allowed rejections are copied from
+// browser/components/extensions/test/browser/head.js.
+PromiseTestUtils.whitelistRejectionsGlobally(/Message manager disconnected/);
+PromiseTestUtils.whitelistRejectionsGlobally(/Receiving end does not exist/);
+
+add_task(async function () {
+  let tab = await addTab(TEST_URL);
+  await openRDM(tab);
+
+  let extension = ExtensionTestUtils.loadExtension({
+    manifest: {
+      "permissions": ["tabs"],
+
+      "content_scripts": [{
+        "matches": [TEST_URL],
+        "js": ["content-script.js"],
+        "run_at": "document_start",
+      }],
+    },
+
+    async background() {
+      const TEST_URL = "http://example.com/"; // eslint-disable-line no-shadow
+
+      browser.test.log("Background script init");
+
+      let extTab;
+      let contentMessage = new Promise(resolve => {
+        browser.test.log("Listen to content");
+        let listener = async (msg, sender, respond) => {
+          browser.test.assertEq(msg, "hello-from-content",
+            "Background script got hello-from-content message");
+
+          let tabs = await browser.tabs.query({
+            currentWindow: true,
+            active: true,
+          });
+          browser.test.assertEq(tabs.length, 1,
+            "One tab is active in the current window");
+          extTab = tabs[0];
+          browser.test.log(`Tab: id ${extTab.id}, url ${extTab.url}`);
+          browser.test.assertEq(extTab.url, TEST_URL, "Tab has the test URL");
+
+          browser.test.assertTrue(!!sender, "Message has a sender");
+          browser.test.assertTrue(!!sender.tab, "Message has a sender.tab");
+          browser.test.assertEq(sender.tab.id, extTab.id,
+            "Sender's tab ID matches the RDM tab ID");
+          browser.test.assertEq(sender.tab.url, extTab.url,
+            "Sender's tab URL matches the RDM tab URL");
+
+          browser.runtime.onMessage.removeListener(listener);
+          resolve();
+        };
+        browser.runtime.onMessage.addListener(listener);
+      });
+
+      // Wait for "resume" message so we know the content script is also ready.
+      await new Promise(resolve => {
+        browser.test.onMessage.addListener(resolve);
+        browser.test.sendMessage("background-script-ready");
+      });
+
+      await contentMessage;
+
+      browser.test.log("Send message from background to content");
+      let contentSender = await browser.tabs.sendMessage(
+        extTab.id,
+        "hello-from-background"
+      );
+      browser.test.assertEq(contentSender.id, browser.runtime.id,
+        "The sender ID in content matches this extension");
+
+      browser.test.notifyPass("rdm-messaging");
+    },
+
+    files: {
+      "content-script.js": async function () {
+        browser.test.log("Content script init");
+
+        browser.test.log("Listen to background");
+        browser.runtime.onMessage.addListener((msg, sender, respond) => {
+          browser.test.assertEq(msg, "hello-from-background",
+            "Content script got hello-from-background message");
+
+          browser.test.assertTrue(!!sender, "Message has a sender");
+          browser.test.assertTrue(!!sender.id, "Message has a sender.id");
+
+          let { id } = sender;
+          respond({ id });
+        });
+
+        // Wait for "resume" message so we know the background script is also ready.
+        await new Promise(resolve => {
+          browser.test.onMessage.addListener(resolve);
+          browser.test.sendMessage("content-script-ready");
+        });
+
+        browser.test.log("Send message from content to background");
+        browser.runtime.sendMessage("hello-from-content");
+      },
+    },
+  });
+
+  let contentScriptReady = extension.awaitMessage("content-script-ready");
+  let backgroundScriptReady = extension.awaitMessage("background-script-ready");
+  let finish = extension.awaitFinish("rdm-messaging");
+
+  await extension.startup();
+
+  // It appears the background script and content script can loaded in either order, so
+  // we'll wait for the both to listen before proceeding.
+  await backgroundScriptReady;
+  await contentScriptReady;
+  extension.sendMessage("resume");
+
+  await finish;
+  await extension.unload();
+
+  await closeRDM(tab);
+  await removeTab(tab);
+});
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -13554,16 +13554,22 @@ nsDocShell::ConfirmRepost(bool* aRepost)
     return rv;
   }
 
   rv = appBundle->GetStringFromName("resendButton.label", button0Title);
   if (NS_FAILED(rv)) {
     return rv;
   }
 
+  // Make the repost prompt tab modal to prevent malicious pages from locking
+  // up the browser, see bug 1412559 for an example.
+  if (nsCOMPtr<nsIWritablePropertyBag2> promptBag = do_QueryInterface(prompter)) {
+    promptBag->SetPropertyAsBool(NS_LITERAL_STRING("allowTabModal"), true);
+  }
+
   int32_t buttonPressed;
   // The actual value here is irrelevant, but we can't pass an invalid
   // bool through XPConnect.
   bool checkState = false;
   rv = prompter->ConfirmEx(
     nullptr, msgString.get(),
     (nsIPrompt::BUTTON_POS_0 * nsIPrompt::BUTTON_TITLE_IS_STRING) +
       (nsIPrompt::BUTTON_POS_1 * nsIPrompt::BUTTON_TITLE_CANCEL),
--- a/editor/libeditor/DeleteRangeTransaction.cpp
+++ b/editor/libeditor/DeleteRangeTransaction.cpp
@@ -6,16 +6,17 @@
 #include "DeleteRangeTransaction.h"
 
 #include "DeleteNodeTransaction.h"
 #include "DeleteTextTransaction.h"
 #include "mozilla/Assertions.h"
 #include "mozilla/EditorBase.h"
 #include "mozilla/dom/Selection.h"
 #include "mozilla/mozalloc.h"
+#include "mozilla/RangeBoundary.h"
 #include "nsCOMPtr.h"
 #include "nsDebug.h"
 #include "nsError.h"
 #include "nsIContent.h"
 #include "nsIContentIterator.h"
 #include "nsINode.h"
 #include "nsAString.h"
 
@@ -51,56 +52,64 @@ DeleteRangeTransaction::DoTransaction()
   // Swap mRangeToDelete out into a stack variable, so we make sure to null it
   // out on return from this function.  Once this function returns, we no longer
   // need mRangeToDelete, and keeping it alive in the long term slows down all
   // DOM mutations because it's observing them.
   RefPtr<nsRange> rangeToDelete;
   rangeToDelete.swap(mRangeToDelete);
 
   // build the child transactions
-  nsCOMPtr<nsINode> startContainer = rangeToDelete->GetStartContainer();
-  int32_t startOffset = rangeToDelete->StartOffset();
-  nsCOMPtr<nsINode> endContainer = rangeToDelete->GetEndContainer();
-  int32_t endOffset = rangeToDelete->EndOffset();
-  MOZ_ASSERT(startContainer && endContainer);
+  const RangeBoundary& startRef = rangeToDelete->StartRef();
+  const RangeBoundary& endRef = rangeToDelete->EndRef();
+  MOZ_ASSERT(startRef.IsSetAndValid());
+  MOZ_ASSERT(endRef.IsSetAndValid());
 
-  if (startContainer == endContainer) {
+  if (startRef.Container() == endRef.Container()) {
     // the selection begins and ends in the same node
-    nsIContent* startChild = rangeToDelete->GetChildAtStartOffset();
-    nsresult rv =
-      CreateTxnsToDeleteBetween(startContainer, startOffset,
-                                startChild, endOffset);
-    NS_ENSURE_SUCCESS(rv, rv);
+    nsresult rv = CreateTxnsToDeleteBetween(startRef.AsRaw(), endRef.AsRaw());
+    if (NS_WARN_IF(NS_FAILED(rv))) {
+      return rv;
+    }
   } else {
     // the selection ends in a different node from where it started.  delete
     // the relevant content in the start node
-    nsresult rv =
-      CreateTxnsToDeleteContent(startContainer, startOffset, nsIEditor::eNext);
-    NS_ENSURE_SUCCESS(rv, rv);
+    nsresult rv = CreateTxnsToDeleteContent(startRef.AsRaw(), nsIEditor::eNext);
+    if (NS_WARN_IF(NS_FAILED(rv))) {
+      return rv;
+    }
     // delete the intervening nodes
     rv = CreateTxnsToDeleteNodesBetween(rangeToDelete);
-    NS_ENSURE_SUCCESS(rv, rv);
+    if (NS_WARN_IF(NS_FAILED(rv))) {
+      return rv;
+    }
     // delete the relevant content in the end node
-    rv = CreateTxnsToDeleteContent(endContainer, endOffset,
-                                   nsIEditor::ePrevious);
-    NS_ENSURE_SUCCESS(rv, rv);
+    rv = CreateTxnsToDeleteContent(endRef.AsRaw(), nsIEditor::ePrevious);
+    if (NS_WARN_IF(NS_FAILED(rv))) {
+      return rv;
+    }
   }
 
   // if we've successfully built this aggregate transaction, then do it.
   nsresult rv = EditAggregateTransaction::DoTransaction();
-  NS_ENSURE_SUCCESS(rv, rv);
+  if (NS_WARN_IF(NS_FAILED(rv))) {
+    return rv;
+  }
 
   // only set selection to deletion point if editor gives permission
   bool bAdjustSelection;
   mEditorBase->ShouldTxnSetSelection(&bAdjustSelection);
   if (bAdjustSelection) {
     RefPtr<Selection> selection = mEditorBase->GetSelection();
-    NS_ENSURE_TRUE(selection, NS_ERROR_NULL_POINTER);
-    rv = selection->Collapse(startContainer, startOffset);
-    NS_ENSURE_SUCCESS(rv, rv);
+    if (NS_WARN_IF(!selection)) {
+      return NS_ERROR_NULL_POINTER;
+    }
+    rv = selection->Collapse(startRef.AsRaw());
+    if (NS_WARN_IF(NS_FAILED(rv))) {
+      return rv;
+    }
   }
   // else do nothing - dom range gravity will adjust selection
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 DeleteRangeTransaction::UndoTransaction()
@@ -117,108 +126,118 @@ DeleteRangeTransaction::RedoTransaction(
 NS_IMETHODIMP
 DeleteRangeTransaction::GetTxnDescription(nsAString& aString)
 {
   aString.AssignLiteral("DeleteRangeTransaction");
   return NS_OK;
 }
 
 nsresult
-DeleteRangeTransaction::CreateTxnsToDeleteBetween(nsINode* aNode,
-                                                  int32_t aStartOffset,
-                                                  nsIContent* aChildAtStartOffset,
-                                                  int32_t aEndOffset)
+DeleteRangeTransaction::CreateTxnsToDeleteBetween(
+                          const RawRangeBoundary& aStart,
+                          const RawRangeBoundary& aEnd)
 {
+  if (NS_WARN_IF(!aStart.IsSetAndValid()) ||
+      NS_WARN_IF(!aEnd.IsSetAndValid()) ||
+      NS_WARN_IF(aStart.Container() != aEnd.Container())) {
+    return NS_ERROR_INVALID_ARG;
+  }
+
   if (NS_WARN_IF(!mEditorBase)) {
     return NS_ERROR_NOT_AVAILABLE;
   }
 
   // see what kind of node we have
-  if (aNode->IsNodeOfType(nsINode::eDATA_NODE)) {
+  if (aStart.Container()->IsNodeOfType(nsINode::eDATA_NODE)) {
     // if the node is a chardata node, then delete chardata content
     int32_t numToDel;
-    if (aStartOffset == aEndOffset) {
+    if (aStart == aEnd) {
       numToDel = 1;
     } else {
-      numToDel = aEndOffset - aStartOffset;
+      numToDel = aEnd.Offset() - aStart.Offset();
+      MOZ_DIAGNOSTIC_ASSERT(numToDel > 0);
     }
 
     RefPtr<nsGenericDOMDataNode> charDataNode =
-      static_cast<nsGenericDOMDataNode*>(aNode);
+      static_cast<nsGenericDOMDataNode*>(aStart.Container());
 
     RefPtr<DeleteTextTransaction> deleteTextTransaction =
-      new DeleteTextTransaction(*mEditorBase, *charDataNode, aStartOffset,
+      new DeleteTextTransaction(*mEditorBase, *charDataNode, aStart.Offset(),
                                 numToDel, mRangeUpdater);
     // If the text node isn't editable, it should be never undone/redone.
     // So, the transaction shouldn't be recorded.
     if (NS_WARN_IF(!deleteTextTransaction->CanDoIt())) {
       return NS_ERROR_FAILURE;
     }
     AppendChild(deleteTextTransaction);
     return NS_OK;
   }
 
-  nsIContent* child = aChildAtStartOffset;
-  for (int32_t i = aStartOffset; i < aEndOffset; ++i) {
-    // Even if we detect invalid range, we should ignore it for removing
-    // specified range's nodes as far as possible.
-    if (NS_WARN_IF(!child)) {
-      break;
-    }
+  // Even if we detect invalid range, we should ignore it for removing
+  // specified range's nodes as far as possible.
+  for (nsIContent* child = aStart.GetChildAtOffset();
+       child && child != aEnd.GetChildAtOffset();
+       child = child->GetNextSibling()) {
     RefPtr<DeleteNodeTransaction> deleteNodeTransaction =
       new DeleteNodeTransaction(*mEditorBase, *child, mRangeUpdater);
     // XXX This is odd handling.  Even if some children are not editable,
     //     editor should append transactions because they could be editable
     //     at undoing/redoing.  Additionally, if the transaction needs to
     //     delete/restore all nodes, it should at undoing/redoing.
     if (deleteNodeTransaction->CanDoIt()) {
       AppendChild(deleteNodeTransaction);
     }
-    child = child->GetNextSibling();
   }
 
   return NS_OK;
 }
 
 nsresult
-DeleteRangeTransaction::CreateTxnsToDeleteContent(nsINode* aNode,
-                                                  int32_t aOffset,
-                                                  nsIEditor::EDirection aAction)
+DeleteRangeTransaction::CreateTxnsToDeleteContent(
+                          const RawRangeBoundary& aPoint,
+                          nsIEditor::EDirection aAction)
 {
+  if (NS_WARN_IF(!aPoint.IsSetAndValid())) {
+    return NS_ERROR_INVALID_ARG;
+  }
+
   if (NS_WARN_IF(!mEditorBase)) {
     return NS_ERROR_NOT_AVAILABLE;
   }
 
-  // see what kind of node we have
-  if (aNode->IsNodeOfType(nsINode::eDATA_NODE)) {
-    // if the node is a chardata node, then delete chardata content
-    uint32_t start, numToDelete;
-    if (nsIEditor::eNext == aAction) {
-      start = aOffset;
-      numToDelete = aNode->Length() - aOffset;
-    } else {
-      start = 0;
-      numToDelete = aOffset;
-    }
+  if (!aPoint.Container()->IsNodeOfType(nsINode::eDATA_NODE)) {
+    return NS_OK;
+  }
+
+  // If the node is a chardata node, then delete chardata content
+  uint32_t startOffset, numToDelete;
+  if (nsIEditor::eNext == aAction) {
+    startOffset = aPoint.Offset();
+    numToDelete = aPoint.Container()->Length() - aPoint.Offset();
+  } else {
+    startOffset = 0;
+    numToDelete = aPoint.Offset();
+  }
 
-    if (numToDelete) {
-      RefPtr<nsGenericDOMDataNode> dataNode =
-        static_cast<nsGenericDOMDataNode*>(aNode);
-      RefPtr<DeleteTextTransaction> deleteTextTransaction =
-        new DeleteTextTransaction(*mEditorBase, *dataNode, start, numToDelete,
-                                  mRangeUpdater);
-      // If the text node isn't editable, it should be never undone/redone.
-      // So, the transaction shouldn't be recorded.
-      if (NS_WARN_IF(!deleteTextTransaction->CanDoIt())) {
-        return NS_ERROR_FAILURE;
-      }
-      AppendChild(deleteTextTransaction);
-    }
+  if (!numToDelete) {
+    return NS_OK;
   }
 
+  RefPtr<nsGenericDOMDataNode> dataNode =
+    static_cast<nsGenericDOMDataNode*>(aPoint.Container());
+  RefPtr<DeleteTextTransaction> deleteTextTransaction =
+    new DeleteTextTransaction(*mEditorBase, *dataNode, startOffset, numToDelete,
+                              mRangeUpdater);
+  // If the text node isn't editable, it should be never undone/redone.
+  // So, the transaction shouldn't be recorded.
+  if (NS_WARN_IF(!deleteTextTransaction->CanDoIt())) {
+    return NS_ERROR_FAILURE;
+  }
+  AppendChild(deleteTextTransaction);
+
   return NS_OK;
 }
 
 nsresult
 DeleteRangeTransaction::CreateTxnsToDeleteNodesBetween(nsRange* aRangeToDelete)
 {
   if (NS_WARN_IF(!mEditorBase)) {
     return NS_ERROR_NOT_AVAILABLE;
--- a/editor/libeditor/DeleteRangeTransaction.h
+++ b/editor/libeditor/DeleteRangeTransaction.h
@@ -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/. */
 
 #ifndef DeleteRangeTransaction_h
 #define DeleteRangeTransaction_h
 
 #include "EditAggregateTransaction.h"
+#include "mozilla/RangeBoundary.h"
 #include "nsCycleCollectionParticipant.h"
 #include "nsID.h"
 #include "nsIEditor.h"
 #include "nsISupportsImpl.h"
 #include "nsRange.h"
 #include "nscore.h"
 
 class nsINode;
@@ -45,25 +46,63 @@ public:
 
   virtual void LastRelease() override
   {
     mRangeToDelete = nullptr;
     EditAggregateTransaction::LastRelease();
   }
 
 protected:
-  nsresult CreateTxnsToDeleteBetween(nsINode* aNode,
-                                     int32_t aStartOffset,
-                                     nsIContent* aChildAtStartOffset,
-                                     int32_t aEndOffset);
+  /**
+   * CreateTxnsToDeleteBetween() creates a DeleteTextTransaction or some
+   * DeleteNodeTransactions to remove text or nodes between aStart and aEnd
+   * and appends the created transactions to the array.
+   *
+   * @param aStart      Must be set and valid point.
+   * @param aEnd        Must be set and valid point.  Additionally, the
+   *                    container must be same as aStart's container.
+   *                    And of course, this must not be before aStart in
+   *                    the DOM tree order.
+   * @return            Returns NS_OK in most cases.
+   *                    When the arguments are invalid, returns
+   *                    NS_ERROR_INVALID_ARG.
+   *                    When mEditorBase isn't available, returns
+   *                    NS_ERROR_NOT_AVAIALBLE.
+   *                    When created DeleteTextTransaction cannot do its
+   *                    transaction, returns NS_ERROR_FAILURE.
+   *                    Note that even if one of created DeleteNodeTransaction
+   *                    cannot do its transaction, this returns NS_OK.
+   */
+  nsresult CreateTxnsToDeleteBetween(const RawRangeBoundary& aStart,
+                                     const RawRangeBoundary& aEnd);
 
   nsresult CreateTxnsToDeleteNodesBetween(nsRange* aRangeToDelete);
 
-  nsresult CreateTxnsToDeleteContent(nsINode* aParent,
-                                     int32_t aOffset,
+  /**
+   * CreateTxnsToDeleteContent() creates a DeleteTextTransaction to delete
+   * text between start of aPoint.Container() and aPoint or aPoint and end of
+   * aPoint.Container() and appends the created transaction to the array.
+   *
+   * @param aPoint      Must be set and valid point.  If the container is not
+   *                    a data node, this method does nothing.
+   * @param aAction     If nsIEditor::eNext, this method creates a transaction
+   *                    to delete text from aPoint to the end of the data node.
+   *                    Otherwise, this method creates a transaction to delete
+   *                    text from start of the data node to aPoint.
+   * @return            Returns NS_OK in most cases.
+   *                    When the arguments are invalid, returns
+   *                    NS_ERROR_INVALID_ARG.
+   *                    When mEditorBase isn't available, returns
+   *                    NS_ERROR_NOT_AVAIALBLE.
+   *                    When created DeleteTextTransaction cannot do its
+   *                    transaction, returns NS_ERROR_FAILURE.
+   *                    Note that even if no character will be deleted,
+   *                    this returns NS_OK.
+   */
+  nsresult CreateTxnsToDeleteContent(const RawRangeBoundary& aPoint,
                                      nsIEditor::EDirection aAction);
 
   // The editor for this transaction.
   RefPtr<EditorBase> mEditorBase;
 
   // P1 in the range.  This is only non-null until DoTransaction is called and
   // we convert it into child transactions.
   RefPtr<nsRange> mRangeToDelete;
--- a/gfx/layers/LayerMetricsWrapper.h
+++ b/gfx/layers/LayerMetricsWrapper.h
@@ -399,18 +399,18 @@ public:
 
     return 1.0f;
   }
 
   EventRegionsOverride GetEventRegionsOverride() const
   {
     MOZ_ASSERT(IsValid());
 
-    if (mLayer->AsContainerLayer()) {
-      return mLayer->AsContainerLayer()->GetEventRegionsOverride();
+    if (mLayer->AsRefLayer()) {
+      return mLayer->AsRefLayer()->GetEventRegionsOverride();
     }
     return EventRegionsOverride::NoOverride;
   }
 
   const ScrollThumbData& GetScrollThumbData() const
   {
     MOZ_ASSERT(IsValid());
 
--- a/gfx/layers/Layers.cpp
+++ b/gfx/layers/Layers.cpp
@@ -835,18 +835,17 @@ ContainerLayer::ContainerLayer(LayerMana
     mPreYScale(1.0f),
     mInheritedXScale(1.0f),
     mInheritedYScale(1.0f),
     mPresShellResolution(1.0f),
     mScaleToResolution(false),
     mUseIntermediateSurface(false),
     mSupportsComponentAlphaChildren(false),
     mMayHaveReadbackChild(false),
-    mChildrenChanged(false),
-    mEventRegionsOverride(EventRegionsOverride::NoOverride)
+    mChildrenChanged(false)
 {
 }
 
 ContainerLayer::~ContainerLayer()
 {
 }
 
 bool
@@ -1030,18 +1029,17 @@ ContainerLayer::RepositionChild(Layer* a
   return true;
 }
 
 void
 ContainerLayer::FillSpecificAttributes(SpecificLayerAttributes& aAttrs)
 {
   aAttrs = ContainerLayerAttributes(mPreXScale, mPreYScale,
                                     mInheritedXScale, mInheritedYScale,
-                                    mPresShellResolution, mScaleToResolution,
-                                    mEventRegionsOverride);
+                                    mPresShellResolution, mScaleToResolution);
 }
 
 bool
 ContainerLayer::Creates3DContextWithExtendingChildren()
 {
   if (Extend3DContext()) {
     return false;
   }
@@ -2057,22 +2055,16 @@ ContainerLayer::PrintInfo(std::stringstr
     aStream << " [usesTmpSurf]";
   }
   if (1.0 != mPreXScale || 1.0 != mPreYScale) {
     aStream << nsPrintfCString(" [preScale=%g, %g]", mPreXScale, mPreYScale).get();
   }
   if (mScaleToResolution) {
     aStream << nsPrintfCString(" [presShellResolution=%g]", mPresShellResolution).get();
   }
-  if (mEventRegionsOverride & EventRegionsOverride::ForceDispatchToContent) {
-    aStream << " [force-dtc]";
-  }
-  if (mEventRegionsOverride & EventRegionsOverride::ForceEmptyHitRegion) {
-    aStream << " [force-ehr]";
-  }
 }
 
 void
 ContainerLayer::DumpPacket(layerscope::LayersPacket* aPacket, const void* aParent)
 {
   Layer::DumpPacket(aPacket, aParent);
   // Get this layer data
   using namespace layerscope;
@@ -2239,16 +2231,22 @@ ImageLayer::DumpPacket(layerscope::Layer
 
 void
 RefLayer::PrintInfo(std::stringstream& aStream, const char* aPrefix)
 {
   ContainerLayer::PrintInfo(aStream, aPrefix);
   if (0 != mId) {
     AppendToString(aStream, mId, " [id=", "]");
   }
+  if (mEventRegionsOverride & EventRegionsOverride::ForceDispatchToContent) {
+    aStream << " [force-dtc]";
+  }
+  if (mEventRegionsOverride & EventRegionsOverride::ForceEmptyHitRegion) {
+    aStream << " [force-ehr]";
+  }
 }
 
 void
 RefLayer::DumpPacket(layerscope::LayersPacket* aPacket, const void* aParent)
 {
   Layer::DumpPacket(aPacket, aParent);
   // Get this layer data
   using namespace layerscope;
--- a/gfx/layers/Layers.h
+++ b/gfx/layers/Layers.h
@@ -2310,30 +2310,16 @@ public:
    * content flag set.
    */
   static bool HasOpaqueAncestorLayer(Layer* aLayer);
 
   void SetChildrenChanged(bool aVal) {
     mChildrenChanged = aVal;
   }
 
-  void SetEventRegionsOverride(EventRegionsOverride aVal) {
-    if (mEventRegionsOverride == aVal) {
-      return;
-    }
-
-    MOZ_LAYERS_LOG_IF_SHADOWABLE(this, ("Layer::Mutated(%p) EventRegionsOverride", this));
-    mEventRegionsOverride = aVal;
-    Mutated();
-  }
-
-  EventRegionsOverride GetEventRegionsOverride() const {
-    return mEventRegionsOverride;
-  }
-
   // If |aRect| is null, the entire layer should be considered invalid for
   // compositing.
   virtual void SetInvalidCompositeRect(const gfx::IntRect* aRect) {}
 
 protected:
   friend class ReadbackProcessor;
 
   // Note that this is not virtual, and is based on the implementation of
@@ -2413,17 +2399,16 @@ protected:
   // Whether the compositor should scale to mPresShellResolution.
   bool mScaleToResolution;
   bool mUseIntermediateSurface;
   bool mSupportsComponentAlphaChildren;
   bool mMayHaveReadbackChild;
   // This is updated by ComputeDifferences. This will be true if we need to invalidate
   // the intermediate surface.
   bool mChildrenChanged;
-  EventRegionsOverride mEventRegionsOverride;
 };
 
 /**
  * A generic layer that references back to its display item.
  *
  * In order to not throw away information early in the pipeline from layout -> webrender,
  * we'd like a generic layer type that can represent all the nsDisplayItems instead of
  * creating a new layer type for each nsDisplayItem for Webrender. Another option
@@ -2833,16 +2818,35 @@ public:
       return;
     }
 
     mFirstChild = mLastChild = aLayer;
     aLayer->SetParent(this);
   }
 
   /**
+   * CONSTRUCTION PHASE ONLY
+   * Set flags that indicate how event regions in the child layer tree need
+   * to be overridden because of properties of the parent layer tree.
+   */
+  void SetEventRegionsOverride(EventRegionsOverride aVal) {
+    if (mEventRegionsOverride == aVal) {
+      return;
+    }
+
+    MOZ_LAYERS_LOG_IF_SHADOWABLE(this, ("Layer::Mutated(%p) EventRegionsOverride", this));
+    mEventRegionsOverride = aVal;
+    Mutated();
+  }
+
+  EventRegionsOverride GetEventRegionsOverride() const {
+    return mEventRegionsOverride;
+  }
+
+  /**
    * DRAWING PHASE ONLY
    * |aLayer| is the same as the argument to ConnectReferentLayer().
    */
   void DetachReferentLayer(Layer* aLayer)
   {
     mFirstChild = mLastChild = nullptr;
     aLayer->SetParent(nullptr);
   }
@@ -2856,25 +2860,28 @@ public:
    * DRAWING PHASE ONLY
    */
   virtual void FillSpecificAttributes(SpecificLayerAttributes& aAttrs) override;
 
   MOZ_LAYER_DECL_NAME("RefLayer", TYPE_REF)
 
 protected:
   RefLayer(LayerManager* aManager, void* aImplData)
-    : ContainerLayer(aManager, aImplData) , mId(0)
+    : ContainerLayer(aManager, aImplData)
+    , mId(0)
+    , mEventRegionsOverride(EventRegionsOverride::NoOverride)
   {}
 
   virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix) override;
 
   virtual void DumpPacket(layerscope::LayersPacket* aPacket, const void* aParent) override;
 
   // 0 is a special value that means "no ID".
   uint64_t mId;
+  EventRegionsOverride mEventRegionsOverride;
 };
 
 void SetAntialiasingFlags(Layer* aLayer, gfx::DrawTarget* aTarget);
 
 #ifdef MOZ_DUMP_PAINTING
 void WriteSnapshotToDumpFile(Layer* aLayer, gfx::DataSourceSurface* aSurf);
 void WriteSnapshotToDumpFile(LayerManager* aManager, gfx::DataSourceSurface* aSurf);
 void WriteSnapshotToDumpFile(Compositor* aCompositor, gfx::DrawTarget* aTarget);
--- a/gfx/layers/LayersTypes.h
+++ b/gfx/layers/LayersTypes.h
@@ -198,17 +198,17 @@ struct EventRegions {
   {
     nsCString result = mHitRegion.ToString();
     result.AppendLiteral(";dispatchToContent=");
     result.Append(mDispatchToContentHitRegion.ToString());
     return result;
   }
 };
 
-// Bit flags that go on a ContainerLayer (or RefLayer) and override the
+// Bit flags that go on a RefLayer and override the
 // event regions in the entire subtree below. This is needed for propagating
 // various flags across processes since the child-process layout code doesn't
 // know about parent-process listeners or CSS rules.
 enum EventRegionsOverride {
   // The default, no flags set
   NoOverride             = 0,
   // Treat all hit regions in the subtree as dispatch-to-content
   ForceDispatchToContent = (1 << 0),
--- a/gfx/layers/apz/src/APZCTreeManager.cpp
+++ b/gfx/layers/apz/src/APZCTreeManager.cpp
@@ -646,16 +646,20 @@ template<class ScrollNode> static EventR
 GetEventRegionsOverride(HitTestingTreeNode* aParent,
                        const ScrollNode& aLayer)
 {
   // Make it so that if the flag is set on the layer tree, it automatically
   // propagates to all the nodes in the corresponding subtree rooted at that
   // layer in the hit-test tree. This saves having to walk up the tree every
   // we want to see if a hit-test node is affected by this flag.
   EventRegionsOverride result = aLayer.GetEventRegionsOverride();
+  if (result != EventRegionsOverride::NoOverride) {
+    // Overrides should only ever get set for ref layers.
+    MOZ_ASSERT(aLayer.GetReferentId());
+  }
   if (aParent) {
     result |= aParent->GetEventRegionsOverride();
   }
   return result;
 }
 
 void
 APZCTreeManager::StartScrollbarDrag(const ScrollableLayerGuid& aGuid,
new file mode 100644
--- /dev/null
+++ b/gfx/layers/apz/test/mochitest/helper_override_root.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width; initial-scale=1.0">
+  <title>Simple wheel scroll cancellation</title>
+  <script type="application/javascript" src="apz_test_native_event_utils.js"></script>
+  <script type="application/javascript" src="apz_test_utils.js"></script>
+  <script type="application/javascript" src="/tests/SimpleTest/paint_listener.js"></script>
+  <script type="application/javascript">
+
+// Add a non-passive listener on the document, so that we have a document-level
+// APZ-aware listener, and the entire document is put in the dispatch-to-content
+// region
+document.addEventListener('wheel', function(e) {
+    dump("Wheel listener running...\n");
+
+    // spin for 2 seconds to give APZ time to scroll, if the event region override
+    // is broken and it decides not to wait for the main thread. Note that it's
+    // possible the APZ controller thread is busy for whatever reason so APZ
+    // may not scroll. That might cause this test to only fail intermittently
+    // instead of consistently if the behaviour being tested regresses.
+    var now = Date.now();
+    while (Date.now() - now < 2000);
+
+    // Cancel the scroll. If this works then we know APZ waited for this listener
+    // to run.
+    e.preventDefault();
+
+    setTimeout(function() {
+        flushApzRepaints(checkScroll);
+    }, 0);
+}, false);
+
+function scrollPage() {
+  synthesizeNativeWheel(document.body, 100, 100, 0, -50);
+  dump("Finished native wheel, waiting for listener to run...\n");
+}
+
+function checkScroll() {
+  is(window.scrollY, 0, "check that the window didn't scroll");
+  subtestDone();
+}
+
+if (window.top != window) {
+    dump("Running inside an iframe! stealing functions from window.top...\n");
+    window.subtestDone = window.top.subtestDone;
+    window.SimpleTest = window.top.SimpleTest;
+    window.is = window.top.is;
+    window.ok = window.top.ok;
+}
+
+waitUntilApzStable().then(scrollPage);
+
+  </script>
+</head>
+<body style="height: 5000px; background-image: linear-gradient(green,red);">
+  This page should not be wheel-scrollable.
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/gfx/layers/apz/test/mochitest/helper_override_subdoc.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width; initial-scale=1.0">
+  <title>Wheel scroll cancellation inside iframe</title>
+  <script type="application/javascript" src="apz_test_utils.js"></script>
+  <script type="application/javascript" src="/tests/SimpleTest/paint_listener.js"></script>
+</head>
+<body>
+    This just loads helper_override_root in an iframe, so that we test event
+    regions overriding on in-process subdocuments.
+    <iframe id="ifr" src="helper_override_root.html" onload="document.getElementById('ifr').focus()"></iframe>
+</body>
+</html>
--- a/gfx/layers/apz/test/mochitest/mochitest.ini
+++ b/gfx/layers/apz/test/mochitest/mochitest.ini
@@ -16,16 +16,18 @@
     helper_div_pan.html
     helper_drag_click.html
     helper_drag_scroll.html
     helper_iframe_pan.html
     helper_iframe1.html
     helper_iframe2.html
     helper_key_scroll.html
     helper_long_tap.html
+    helper_override_root.html
+    helper_override_subdoc.html
     helper_scroll_inactive_perspective.html
     helper_scroll_inactive_zindex.html
     helper_scroll_on_position_fixed.html
     helper_scroll_over_scrollbar.html
     helper_scroll_tables_perspective.html
     helper_scrollto_tap.html
     helper_subframe_style.css
     helper_tall.html
@@ -67,8 +69,10 @@ skip-if = os == 'win' && os_version == '
 [test_scroll_subframe_scrollbar.html]
   skip-if = (os == 'android') # wheel events not supported on mobile
 [test_touch_listeners_impacting_wheel.html]
   skip-if = (toolkit == 'android') || (toolkit == 'cocoa') # wheel events not supported on mobile, and synthesized wheel smooth-scrolling not supported on OS X
 [test_wheel_scroll.html]
   skip-if = (os == 'android') # wheel events not supported on mobile
 [test_wheel_transactions.html]
   skip-if = (os == 'android') # wheel events not supported on mobile
+[test_group_overrides.html]
+  skip-if = (os == 'android') # wheel events not supported on mobile
new file mode 100644
--- /dev/null
+++ b/gfx/layers/apz/test/mochitest/test_group_overrides.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>Various tests for event regions overrides</title>
+  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <script type="application/javascript" src="apz_test_utils.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+  <script type="application/javascript">
+
+var prefs = [
+  // turn off smooth scrolling so that we don't have to wait for
+  // APZ animations to finish before sampling the scroll offset
+  ['general.smoothScroll', false],
+  // Increase the content response timeout because these tests do preventDefault
+  // and we want to make sure APZ actually waits for them.
+  ['apz.content_response_timeout', 10000],
+]
+
+var subtests = [
+  {'file': 'helper_override_root.html', 'prefs': prefs},
+  {'file': 'helper_override_subdoc.html', 'prefs': prefs},
+];
+
+if (isApzEnabled()) {
+  SimpleTest.waitForExplicitFinish();
+  window.onload = function() {
+    runSubtestsSeriallyInFreshWindows(subtests)
+    .then(SimpleTest.finish);
+  };
+}
+
+  </script>
+</head>
+<body>
+</body>
+</html>
--- a/gfx/layers/ipc/LayerTransactionParent.cpp
+++ b/gfx/layers/ipc/LayerTransactionParent.cpp
@@ -604,20 +604,16 @@ LayerTransactionParent::SetLayerAttribut
       return false;
     }
     const ContainerLayerAttributes& attrs =
       specific.get_ContainerLayerAttributes();
     containerLayer->SetPreScale(attrs.preXScale(), attrs.preYScale());
     containerLayer->SetInheritedScale(attrs.inheritedXScale(), attrs.inheritedYScale());
     containerLayer->SetScaleToResolution(attrs.scaleToResolution(),
                                          attrs.presShellResolution());
-    if (attrs.eventRegionsOverride() != containerLayer->GetEventRegionsOverride()) {
-      UpdateHitTestingTree(layer, "event regions override changed");
-      containerLayer->SetEventRegionsOverride(attrs.eventRegionsOverride());
-    }
     break;
   }
   case Specific::TColorLayerAttributes: {
     MOZ_LAYERS_LOG(("[ParentSide]   color layer"));
 
     ColorLayer* colorLayer = layer->AsColorLayer();
     if (!colorLayer) {
       return false;
--- a/gfx/layers/ipc/LayersMessages.ipdlh
+++ b/gfx/layers/ipc/LayersMessages.ipdlh
@@ -282,34 +282,31 @@ struct PaintedLayerAttributes {
 };
 struct ContainerLayerAttributes {
   float preXScale;
   float preYScale;
   float inheritedXScale;
   float inheritedYScale;
   float presShellResolution;
   bool scaleToResolution;
-  EventRegionsOverride eventRegionsOverride;
 };
 
 struct GlyphArray
 {
   LayerColor color;
   Glyph[] glyphs;
 };
 
 // XXX - Bas - Hack warning! This is using a raw pointer to a ScaledFont*
 // and won't work with e10s.
 struct TextLayerAttributes      { IntRect bounds; GlyphArray[] glyphs; uintptr_t scaledFont; };
 struct ColorLayerAttributes     { LayerColor color; IntRect bounds; };
 struct CanvasLayerAttributes    { SamplingFilter samplingFilter; IntRect bounds; };
 struct RefLayerAttributes {
   uint64_t id;
-  // TODO: Once bug 1132895 is fixed we shouldn't need to propagate the override
-  // explicitly here.
   EventRegionsOverride eventRegionsOverride;
 };
 struct ImageLayerAttributes     { SamplingFilter samplingFilter; IntSize scaleToSize; ScaleMode scaleMode; };
 struct BorderLayerAttributes {
   LayerRect rect;
   BorderColors colors;
   BorderCorners corners;
   BorderWidths widths;
--- a/gfx/layers/wr/WebRenderCommandBuilder.cpp
+++ b/gfx/layers/wr/WebRenderCommandBuilder.cpp
@@ -75,22 +75,16 @@ WebRenderCommandBuilder::BuildWebRenderC
       StackingContextHelper pageRootSc(sc, aBuilder);
       CreateWebRenderCommandsFromDisplayList(aDisplayList, aDisplayListBuilder,
                                              pageRootSc, aBuilder, aResourceUpdates);
     }
 
     // Make a "root" layer data that has everything else as descendants
     mLayerScrollData.emplace_back();
     mLayerScrollData.back().InitializeRoot(mLayerScrollData.size() - 1);
-    if (aDisplayListBuilder->IsBuildingLayerEventRegions()) {
-      nsIPresShell* shell = aDisplayListBuilder->RootReferenceFrame()->PresShell();
-      if (nsLayoutUtils::HasDocumentLevelListenersForApzAwareEvents(shell)) {
-        mLayerScrollData.back().SetEventRegionsOverride(EventRegionsOverride::ForceDispatchToContent);
-      }
-    }
     auto callback = [&aScrollData](FrameMetrics::ViewID aScrollId) -> bool {
       return aScrollData.HasMetadataFor(aScrollId);
     };
     if (Maybe<ScrollMetadata> rootMetadata = nsLayoutUtils::GetRootMetadata(
           aDisplayListBuilder, mManager, ContainerLayerParameters(), callback)) {
       mLayerScrollData.back().AppendScrollMetadata(aScrollData, rootMetadata.ref());
     }
     // Append the WebRenderLayerScrollData items into WebRenderScrollData
--- a/gfx/layers/wr/WebRenderLayerManager.cpp
+++ b/gfx/layers/wr/WebRenderLayerManager.cpp
@@ -220,34 +220,16 @@ WebRenderLayerManager::EndEmptyTransacti
   }
 
   WrBridge()->EndEmptyTransaction(mFocusTarget, mLatestTransactionId, transactionStart);
 
   MakeSnapshotIfRequired(size);
   return true;
 }
 
-/*static*/ int32_t
-PopulateScrollData(WebRenderScrollData& aTarget, Layer* aLayer)
-{
-  MOZ_ASSERT(aLayer);
-
-  // We want to allocate a WebRenderLayerScrollData object for this layer,
-  // but don't keep a pointer to it since it might get memmove'd during the
-  // recursion below. Instead keep the index and get the pointer later.
-  size_t index = aTarget.AddNewLayerData();
-
-  int32_t descendants = 0;
-  for (Layer* child = aLayer->GetLastChild(); child; child = child->GetPrevSibling()) {
-    descendants += PopulateScrollData(aTarget, child);
-  }
-  aTarget.GetLayerDataMutable(index)->Initialize(aTarget, aLayer, descendants);
-  return descendants + 1;
-}
-
 void
 WebRenderLayerManager::EndTransaction(DrawPaintedLayerCallback aCallback,
                                       void* aCallbackData,
                                       EndTransactionFlags aFlags)
 {
   // This should never get called, all callers should use
   // EndTransactionWithoutLayer instead.
   MOZ_ASSERT(false);
--- a/gfx/layers/wr/WebRenderScrollData.cpp
+++ b/gfx/layers/wr/WebRenderScrollData.cpp
@@ -28,47 +28,16 @@ WebRenderLayerScrollData::WebRenderLayer
 {
 }
 
 WebRenderLayerScrollData::~WebRenderLayerScrollData()
 {
 }
 
 void
-WebRenderLayerScrollData::Initialize(WebRenderScrollData& aOwner,
-                                     Layer* aLayer,
-                                     int32_t aDescendantCount)
-{
-  MOZ_ASSERT(aDescendantCount >= 0); // Ensure value is valid
-  MOZ_ASSERT(mDescendantCount == -1); // Don't allow re-setting an already set value
-  mDescendantCount = aDescendantCount;
-
-  MOZ_ASSERT(aLayer);
-  for (uint32_t i = 0; i < aLayer->GetScrollMetadataCount(); i++) {
-    mScrollIds.AppendElement(aOwner.AddMetadata(aLayer->GetScrollMetadata(i)));
-  }
-
-  mTransform = aLayer->GetTransform();
-  mTransformIsPerspective = aLayer->GetTransformIsPerspective();
-  mEventRegions = aLayer->GetEventRegions();
-  mVisibleRegion = aLayer->GetVisibleRegion();
-  mReferentId = aLayer->AsRefLayer()
-      ? Some(aLayer->AsRefLayer()->GetReferentId())
-      : Nothing();
-  mEventRegionsOverride = aLayer->AsContainerLayer()
-      ? aLayer->AsContainerLayer()->GetEventRegionsOverride()
-      : EventRegionsOverride::NoOverride;
-  mScrollThumbData = aLayer->GetScrollThumbData();
-  mScrollbarAnimationId = aLayer->GetCompositorAnimationsId();
-  mScrollbarTargetContainerId = aLayer->GetScrollbarTargetContainerId();
-  mIsScrollbarContainer = aLayer->IsScrollbarContainer();
-  mFixedPosScrollContainerId = aLayer->GetFixedPositionScrollContainerId();
-}
-
-void
 WebRenderLayerScrollData::InitializeRoot(int32_t aDescendantCount)
 {
   mDescendantCount = aDescendantCount;
 }
 
 void
 WebRenderLayerScrollData::Initialize(WebRenderScrollData& aOwner,
                                      nsDisplayItem* aItem,
--- a/gfx/layers/wr/WebRenderScrollData.h
+++ b/gfx/layers/wr/WebRenderScrollData.h
@@ -37,22 +37,16 @@ class WebRenderScrollData;
 // Each WebRenderLayerScrollData is conceptually associated with an "owning"
 // WebRenderScrollData.
 class WebRenderLayerScrollData
 {
 public:
   WebRenderLayerScrollData(); // needed for IPC purposes
   ~WebRenderLayerScrollData();
 
-  // Actually initialize the object. This is not done during the constructor
-  // for optimization purposes (the call site is hard to write efficiently
-  // if we do this in the constructor).
-  void Initialize(WebRenderScrollData& aOwner,
-                  Layer* aLayer,
-                  int32_t aDescendantCount);
   void InitializeRoot(int32_t aDescendantCount);
   void Initialize(WebRenderScrollData& aOwner,
                   nsDisplayItem* aItem,
                   int32_t aDescendantCount,
                   const ActiveScrolledRoot* aStopAtAsr);
 
   int32_t GetDescendantCount() const;
   size_t GetScrollMetadataCount() const;
--- a/intl/locale/PluralForm.jsm
+++ b/intl/locale/PluralForm.jsm
@@ -65,16 +65,18 @@ var gFunctions = [
   // 13: Maltese
   [4, (n) => n==1?0:n==0||n%100>0&&n%100<=10?1:n%100>10&&n%100<20?2:3],
   // 14: Macedonian
   [3, (n) => n%10==1?0:n%10==2?1:2],
   // 15: Icelandic
   [2, (n) => n%10==1&&n%100!=11?0:1],
   // 16: Breton
   [5, (n) => n%10==1&&n%100!=11&&n%100!=71&&n%100!=91?0:n%10==2&&n%100!=12&&n%100!=72&&n%100!=92?1:(n%10==3||n%10==4||n%10==9)&&n%100!=13&&n%100!=14&&n%100!=19&&n%100!=73&&n%100!=74&&n%100!=79&&n%100!=93&&n%100!=94&&n%100!=99?2:n%1000000==0&&n!=0?3:4],
+  // 17: Shuar
+  [2, (n) => n!=0?1:0],
 ];
 
 this.PluralForm = {
   /**
    * Get the correct plural form of a word based on the number
    *
    * @param aNum
    *        The number to decide which plural form to use
--- a/intl/locale/tests/unit/test_pluralForm.js
+++ b/intl/locale/tests/unit/test_pluralForm.js
@@ -584,16 +584,50 @@ function run_test()
     5,1,2,3,3,5,5,5,5,3,
     5,1,2,3,3,5,5,5,5,3,
     5,1,2,3,3,5,5,5,5,3,
     5,1,2,3,3,5,5,5,5,3,
     5,1,2,3,3,5,5,5,5,3,
     5,5,5,5,5,5,5,5,5,5,
     5,1,2,3,3,5,5,5,5,3,
     5,5,5,5,5,5,5,5,5,5,
+  ], [
+    // 17: Shuar 0-9, 10-19, ..., 90-99
+    1,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    // 100-109, 110-119, ..., 190-199
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    // 200-209, 210-219, ..., 290-299
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
+    2,2,2,2,2,2,2,2,2,2,
   ]];
 
   for (let [rule, expect] of allExpect.entries()) {
     print("\nTesting rule #" + rule);
 
     let [get, numForms] = PluralForm.makeGetter(rule);
 
     // Make sure the largest value expected matches the number of plural forms
--- a/layout/base/nsLayoutUtils.cpp
+++ b/layout/base/nsLayoutUtils.cpp
@@ -3775,16 +3775,19 @@ nsLayoutUtils::PaintFrame(gfxContext* aR
           id = nsLayoutUtils::FindOrCreateIDFor(element);
         }
       }
 
       nsDisplayListBuilder::AutoCurrentScrollParentIdSetter idSetter(&builder, id);
 
       builder.SetVisibleRect(visibleRect);
       builder.SetIsBuilding(true);
+      builder.SetAncestorHasApzAwareEventHandler(
+          builder.IsBuildingLayerEventRegions() &&
+          nsLayoutUtils::HasDocumentLevelListenersForApzAwareEvents(presShell));
 
       const bool paintedPreviously =
         aFrame->HasProperty(nsIFrame::ModifiedFrameList());
 
       // Attempt to do a partial build and merge into the existing list.
       // This calls BuildDisplayListForStacking context on a subset of the
       // viewport.
       bool merged = false;
--- a/layout/generic/nsFrame.cpp
+++ b/layout/generic/nsFrame.cpp
@@ -2523,16 +2523,20 @@ public:
   ~AutoSaveRestoreContainsBlendMode() {
     mBuilder.SetContainsBlendMode(mSavedContainsBlendMode);
   }
 };
 
 static void
 CheckForApzAwareEventHandlers(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame)
 {
+  if (aBuilder->GetAncestorHasApzAwareEventHandler()) {
+    return;
+  }
+
   nsIContent* content = aFrame->GetContent();
   if (!content) {
     return;
   }
 
   if (content->IsNodeApzAware()) {
     aBuilder->SetAncestorHasApzAwareEventHandler(true);
   }
--- a/layout/generic/nsSubDocumentFrame.cpp
+++ b/layout/generic/nsSubDocumentFrame.cpp
@@ -442,22 +442,16 @@ nsSubDocumentFrame::BuildDisplayList(nsD
       constructZoomItem ||
       haveDisplayPort ||
       presContext->IsRootContentDocument() ||
       (sf && sf->IsScrollingActive(aBuilder)))
   {
     needsOwnLayer = true;
   }
 
-  if (!needsOwnLayer && aBuilder->IsBuildingLayerEventRegions() &&
-      nsLayoutUtils::HasDocumentLevelListenersForApzAwareEvents(presShell))
-  {
-    needsOwnLayer = true;
-  }
-
   if (aBuilder->IsRetainingDisplayList()) {
     // The value of needsOwnLayer can change between builds without
     // an invalidation recorded for this frame (like if the root
     // scrollframe becomes active). If this happens,
     // then we need to notify the builder so that merging can
     // happen correctly.
     if (!mPreviouslyNeededLayer ||
         mPreviouslyNeededLayer.value() != needsOwnLayer) {
@@ -500,17 +494,21 @@ nsSubDocumentFrame::BuildDisplayList(nsD
     if (subdocRootFrame) {
       nsIFrame* rootScrollFrame = presShell->GetRootScrollFrame();
       nsDisplayListBuilder::AutoCurrentScrollParentIdSetter idSetter(
           aBuilder,
           ignoreViewportScrolling && rootScrollFrame && rootScrollFrame->GetContent()
               ? nsLayoutUtils::FindOrCreateIDFor(rootScrollFrame->GetContent())
               : aBuilder->GetCurrentScrollParentId());
 
-      aBuilder->SetAncestorHasApzAwareEventHandler(false);
+      bool hasDocumentLevelListenersForApzAwareEvents =
+          aBuilder->IsBuildingLayerEventRegions() &&
+          nsLayoutUtils::HasDocumentLevelListenersForApzAwareEvents(presShell);
+
+      aBuilder->SetAncestorHasApzAwareEventHandler(hasDocumentLevelListenersForApzAwareEvents);
       subdocRootFrame->
         BuildDisplayListForStackingContext(aBuilder, &childItems);
     }
 
     if (!aBuilder->IsForEventDelivery()) {
       // If we are going to use a displayzoom below then any items we put under
       // it need to have underlying frames from the subdocument. So we need to
       // calculate the bounds based on which frame will be the underlying frame
--- a/layout/ipc/RenderFrameParent.cpp
+++ b/layout/ipc/RenderFrameParent.cpp
@@ -369,18 +369,18 @@ nsDisplayRemote::nsDisplayRemote(nsDispl
 }
 
 already_AddRefed<Layer>
 nsDisplayRemote::BuildLayer(nsDisplayListBuilder* aBuilder,
                             LayerManager* aManager,
                             const ContainerLayerParameters& aContainerParameters)
 {
   RefPtr<Layer> layer = mRemoteFrame->BuildLayer(aBuilder, mFrame, aManager, this, aContainerParameters);
-  if (layer && layer->AsContainerLayer()) {
-    layer->AsContainerLayer()->SetEventRegionsOverride(mEventRegionsOverride);
+  if (layer && layer->AsRefLayer()) {
+    layer->AsRefLayer()->SetEventRegionsOverride(mEventRegionsOverride);
   }
   return layer.forget();
 }
 
 bool
 nsDisplayRemote::CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
                                          mozilla::wr::IpcResourceUpdateQueue& aResources,
                                          const StackingContextHelper& aSc,
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -2476,22 +2476,16 @@ already_AddRefed<LayerManager> nsDisplay
       layerManager->SetUserData(&gLayerManagerLayerBuilder, oldBuilder);
       return nullptr;
     }
     // Root is being scaled up by the X/Y resolution. Scale it back down.
     root->SetPostScale(1.0f/containerParameters.mXScale,
                        1.0f/containerParameters.mYScale);
     root->SetScaleToResolution(presShell->ScaleToResolution(),
         containerParameters.mXScale);
-    if (aBuilder->IsBuildingLayerEventRegions() &&
-        nsLayoutUtils::HasDocumentLevelListenersForApzAwareEvents(presShell)) {
-      root->SetEventRegionsOverride(EventRegionsOverride::ForceDispatchToContent);
-    } else {
-      root->SetEventRegionsOverride(EventRegionsOverride::NoOverride);
-    }
 
     auto callback = [root](FrameMetrics::ViewID aScrollId) -> bool {
       return nsLayoutUtils::ContainsMetricsWithId(root, aScrollId);
     };
     if (Maybe<ScrollMetadata> rootMetadata = nsLayoutUtils::GetRootMetadata(
           aBuilder, root->Manager(), containerParameters, callback)) {
       root->SetScrollMetadata(rootMetadata.value());
     }
@@ -6856,45 +6850,31 @@ nsDisplaySubDocument::nsDisplaySubDocume
                                            nsSubDocumentFrame* aSubDocFrame,
                                            nsDisplayList* aList, uint32_t aFlags)
     : nsDisplayOwnLayer(aBuilder, aFrame, aList, aBuilder->CurrentActiveScrolledRoot(), aFlags)
     , mScrollParentId(aBuilder->GetCurrentScrollParentId())
     , mShouldFlatten(false)
     , mSubDocFrame(aSubDocFrame)
 {
   MOZ_COUNT_CTOR(nsDisplaySubDocument);
-  mForceDispatchToContentRegion =
-    aBuilder->IsBuildingLayerEventRegions() &&
-    nsLayoutUtils::HasDocumentLevelListenersForApzAwareEvents(aFrame->PresShell());
 
   // The SubDocument display item is conceptually outside the viewport frame,
   // so in cases where the viewport frame is an AGR, the SubDocument's AGR
   // should be not the viewport frame itself, but its parent AGR.
   if (*mAnimatedGeometryRoot == mFrame && mAnimatedGeometryRoot->mParentAGR) {
     mAnimatedGeometryRoot = mAnimatedGeometryRoot->mParentAGR;
   }
 }
 
 #ifdef NS_BUILD_REFCNT_LOGGING
 nsDisplaySubDocument::~nsDisplaySubDocument() {
   MOZ_COUNT_DTOR(nsDisplaySubDocument);
 }
 #endif
 
-already_AddRefed<Layer>
-nsDisplaySubDocument::BuildLayer(nsDisplayListBuilder* aBuilder,
-                                 LayerManager* aManager,
-                                 const ContainerLayerParameters& aContainerParameters) {
-  RefPtr<Layer> layer = nsDisplayOwnLayer::BuildLayer(aBuilder, aManager, aContainerParameters);
-  layer->AsContainerLayer()->SetEventRegionsOverride(mForceDispatchToContentRegion
-    ? EventRegionsOverride::ForceDispatchToContent
-    : EventRegionsOverride::NoOverride);
-  return layer.forget();
-}
-
 UniquePtr<ScrollMetadata>
 nsDisplaySubDocument::ComputeScrollMetadata(LayerManager* aLayerManager,
                                             const ContainerLayerParameters& aContainerParameters)
 {
   if (!(mFlags & GENERATE_SCROLLABLE_LAYER)) {
     return UniquePtr<ScrollMetadata>(nullptr);
   }
 
--- a/layout/painting/nsDisplayList.h
+++ b/layout/painting/nsDisplayList.h
@@ -696,17 +696,17 @@ public:
   }
   bool IsBuildingLayerEventRegions();
   static bool LayerEventRegionsEnabled();
   bool IsInsidePointerEventsNoneDoc()
   {
     return CurrentPresShellState()->mInsidePointerEventsNoneDoc;
   }
 
-  bool GetAncestorHasApzAwareEventHandler() { return mAncestorHasApzAwareEventHandler; }
+  bool GetAncestorHasApzAwareEventHandler() const { return mAncestorHasApzAwareEventHandler; }
   void SetAncestorHasApzAwareEventHandler(bool aValue)
   {
     mAncestorHasApzAwareEventHandler = aValue;
   }
 
   bool HaveScrollableDisplayPort() const { return mHaveScrollableDisplayPort; }
   void SetHaveScrollableDisplayPort() { mHaveScrollableDisplayPort = true; }
   void ClearHaveScrollableDisplayPort() { mHaveScrollableDisplayPort = false; }
@@ -5106,20 +5106,16 @@ class nsDisplaySubDocument : public nsDi
 public:
   nsDisplaySubDocument(nsDisplayListBuilder* aBuilder,
                        nsIFrame* aFrame, nsSubDocumentFrame* aSubDocFrame,
                        nsDisplayList* aList, uint32_t aFlags);
 #ifdef NS_BUILD_REFCNT_LOGGING
   virtual ~nsDisplaySubDocument();
 #endif
 
-  virtual already_AddRefed<Layer> BuildLayer(nsDisplayListBuilder* aBuilder,
-                                             LayerManager* aManager,
-                                             const ContainerLayerParameters& aContainerParameters) override;
-
   virtual nsRect GetBounds(nsDisplayListBuilder* aBuilder,
                            bool* aSnap) const override;
 
   virtual nsSubDocumentFrame* SubDocumentFrame() { return mSubDocFrame; }
 
   virtual bool ComputeVisibility(nsDisplayListBuilder* aBuilder,
                                  nsRegion* aVisibleRegion) override;
 
--- a/security/manager/ssl/StaticHPKPins.h
+++ b/security/manager/ssl/StaticHPKPins.h
@@ -1154,9 +1154,9 @@ static const TransportSecurityPreload kP
   { "za.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
   { "zh.search.yahoo.com", false, true, false, -1, &kPinset_yahoo },
 };
 
 // Pinning Preload List Length = 481;
 
 static const int32_t kUnknownId = -1;
 
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1518637560032000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1518723892807000);
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -1,12 +1,12 @@
 06se.com: could not connect to host
 0day.su: could not connect to host
-1000serien.com: could not connect to host
-27728522.com: could not connect to host
+33836.com: could not connect to host
+3hl0.net: could not connect to host
 47tech.com: could not connect to host
 4loc.us: could not connect to host
 4x4.lk: could not connect to host
 692b8c32.de: could not connect to host
 8560.be: could not connect to host
 87577.com: could not connect to host
 8887999.com: could not connect to host
 8ack.de: could not connect to host
@@ -14,69 +14,70 @@ 8t88.biz: could not connect to host
 91-freedom.com: could not connect to host
 9ss6.com: could not connect to host
 aaronmcguire.me: could not connect to host
 abolition.co: could not connect to host
 accwing.com: could not connect to host
 acrossgw.com: could not connect to host
 adamfontenot.com: could not connect to host
 adamgold.net: could not connect to host
+adblock.ovh: could not connect to host
 adquisitio.co.uk: could not connect to host
 adquisitio.es: could not connect to host
 adquisitio.fr: could not connect to host
 adquisitio.it: could not connect to host
-adzie.xyz: could not connect to host
 aevpn.org: could not connect to host
 affily.io: could not connect to host
 agowa338.de: could not connect to host
 akiba-server.info: could not connect to host
 akita-stream.com: could not connect to host
 akoww.de: could not connect to host
 akul.co.in: could not connect to host
 al-f.net: could not connect to host
 alamgir.works: could not connect to host
 alasta.info: could not connect to host
 alauda-home.de: could not connect to host
-alexandernorth.ch: could not connect to host
 alexey-shamara.ru: could not connect to host
 alexmol.tk: could not connect to host
 alexperry.io: could not connect to host
+alilialili.ga: could not connect to host
 alphie.me: could not connect to host
 altahrim.net: could not connect to host
 ameho.me: could not connect to host
 amua.fr: could not connect to host
 anastasia-shamara.ru: could not connect to host
 andiplusben.com: could not connect to host
 andreaskluge.eu: could not connect to host
 andrei-coman.com: could not connect to host
-andrepicard.de: could not connect to host
 annetaan.fi: could not connect to host
-answers-online.ru: could not connect to host
+anvartay.com: could not connect to host
 anyways.at: could not connect to host
+aperture-laboratories.science: could not connect to host
 apkoyunlar.club: could not connect to host
 appdrinks.com: could not connect to host
+applesana.es: could not connect to host
 arawaza.biz: could not connect to host
 arawaza.info: could not connect to host
 arent.kz: could not connect to host
 arksan.com.tr: could not connect to host
 artisense.de: could not connect to host
 artyland.ru: could not connect to host
 aseith.com: could not connect to host
 askmagicconch.com: could not connect to host
 assdecoeur.org: could not connect to host
+asthon.cn: could not connect to host
 at1.co: could not connect to host
 athi.pl: could not connect to host
 austinsutphin.com: could not connect to host
 australiancattle.dog: could not connect to host
 autostop-occasions.be: could not connect to host
 autozane.com: could not connect to host
 awan.tech: could not connect to host
 awf0.xyz: could not connect to host
 b8a.me: could not connect to host
-bakaweb.fr: could not connect to host
 balonmano.co: could not connect to host
 bandally.net: could not connect to host
 bandarifamily.com: could not connect to host
 bandiga.it: could not connect to host
 barbate.fr: could not connect to host
 bbb1991.me: could not connect to host
 bbdos.ru: could not connect to host
 beasel.biz: could not connect to host
@@ -87,93 +88,97 @@ benjamin-suess.de: could not connect to 
 benzou-space.com: could not connect to host
 berduri.com: could not connect to host
 berthelier.me: could not connect to host
 bey.io: could not connect to host
 binimo.com: could not connect to host
 bip.gov.sa: could not connect to host
 bitmessage.ch: could not connect to host
 bizeau.ch: could not connect to host
+bjtxl.cn: could not connect to host
 blackdiam.net: could not connect to host
 blackscytheconsulting.com: could not connect to host
 blinkenlight.co.uk: could not connect to host
 blinkenlight.com.au: could not connect to host
-blog.gparent.org: could not connect to host
-blogtroterzy.pl: could not connect to host
 blumen-garage.de: could not connect to host
 bm-i.ch: could not connect to host
 bodrumfarm.com: could not connect to host
 bolwerk.com.br: could not connect to host
 borisbesemer.com: could not connect to host
 bouncelanduk.co.uk: could not connect to host
 bouncourseplanner.net: could not connect to host
-bouncycastlehiremalvern.co.uk: could not connect to host
+boxdevigneron.fr: could not connect to host
 brage.info: could not connect to host
+braintensive.com: could not connect to host
 brettabel.com: could not connect to host
 brfvh24.se: could not connect to host
-brunner.ninja: could not connect to host
 bsktweetup.info: could not connect to host
 bsuess.de: could not connect to host
+btsoft.eu: could not connect to host
 buka.jp: could not connect to host
 burlesquemakeup.com: could not connect to host
 businessfurs.info: could not connect to host
 businessmodeler.se: could not connect to host
 buyshoe.org: could not connect to host
 bvexplained.co.uk: could not connect to host
 by1898.com: could not connect to host
 bypass.kr: could not connect to host
 c16t.uk: could not connect to host
 cafesg.net: could not connect to host
 calculatoaresecondhand.xyz: could not connect to host
 callabs.net: could not connect to host
 callsigns.ca: could not connect to host
 calories.org: could not connect to host
 canarymod.net: could not connect to host
-cardse.net: could not connect to host
 carlandfaith.com: could not connect to host
-carloshmm.stream: could not connect to host
 casinoreal.com: could not connect to host
 caughtredhanded.co.nz: could not connect to host
 centos.pub: could not connect to host
 challengeskins.com: could not connect to host
 chaoticlaw.com: could not connect to host
 charmyadesara.com: could not connect to host
 charonsecurity.com: could not connect to host
+charta-digitale-vernetzung.de: could not connect to host
 cheah.xyz: could not connect to host
 cheesefusion.com: could not connect to host
 childrendeservebetter.org: could not connect to host
 china-line.org: could not connect to host
 chloehorler.com: could not connect to host
 chosenplaintext.org: could not connect to host
 chrisu3050.at: could not connect to host
 chziyue.com: could not connect to host
 cjtkfan.club: could not connect to host
 clearchatsandbox.com: could not connect to host
 clearviewwealthprojector.com.au: could not connect to host
 cloudbleed.info: could not connect to host
+cloudbolin.es: could not connect to host
 cloudimproved.com: could not connect to host
 cloudimprovedtest.com: could not connect to host
+cni-certing.it: could not connect to host
 cnlic.com: could not connect to host
+co-yutaka.com: could not connect to host
 coco-cool.fr: could not connect to host
 code.fm: could not connect to host
 codenlife.xyz: could not connect to host
 codercross.com: could not connect to host
 colleencornez.com: could not connect to host
 coloppe.com: could not connect to host
 comprehensiveihc.com: could not connect to host
 conception.sk: could not connect to host
 conniesacademy.com: could not connect to host
+connyduck.at: could not connect to host
 corinnanese.de: could not connect to host
-cosmeticasimple.com: could not connect to host
 cosplayer.com: could not connect to host
 cpaneltips.com: could not connect to host
 crackpfer.de: could not connect to host
+craftinginredlipstick.com: could not connect to host
 cristianhares.com: could not connect to host
 criticalaim.com: could not connect to host
 crow.tw: could not connect to host
+cryptoki.fr: could not connect to host
 crystalmachine.net: could not connect to host
 csgo.help: could not connect to host
 csgo77.com: could not connect to host
 cubela.tech: could not connect to host
 customfilmworks.com: could not connect to host
 cyber-computer.club: could not connect to host
 cyberpeace.nl: could not connect to host
 cypherpunk.ws: could not connect to host
@@ -181,133 +186,140 @@ d-bood.site: could not connect to host
 dahlberg.cologne: could not connect to host
 daniel-stahl.net: could not connect to host
 darkdestiny.ch: could not connect to host
 darlastudio66.com: could not connect to host
 datorb.com: could not connect to host
 davidscherzer.at: could not connect to host
 davros.eu: could not connect to host
 davros.ru: could not connect to host
-dawnson.is: could not connect to host
 dawnsonb.com: could not connect to host
 days.one: could not connect to host
 dbcom.ru: could not connect to host
 de-servers.de: could not connect to host
 decoyrouting.com: could not connect to host
 deloittequant.com: could not connect to host
+demo.sb: could not connect to host
 derchris.me: could not connect to host
 derivativeshub.pro: could not connect to host
 dermacarecomplex.com: could not connect to host
 dev-talk.eu: could not connect to host
 devkid.net: could not connect to host
 devops.moe: could not connect to host
+dhome.at: could not connect to host
 dick.red: could not connect to host
+digioccumss.ddns.net: could not connect to host
 diguass.us: could not connect to host
 dijks.com: could not connect to host
 dirtycat.ru: could not connect to host
 disadattamentolavorativo.it: could not connect to host
 disco-crazy-world.de: could not connect to host
 djangogolf.com: could not connect to host
 dlyl888.com: could not connect to host
+dmdre.com: could not connect to host
 dojifish.space: could not connect to host
 dolphin-hosting.com: could not connect to host
 domengrad.ru: could not connect to host
 dostavkakurierom.ru: could not connect to host
 drakeluce.com: could not connect to host
 dreaming.solutions: could not connect to host
 drighes.com: could not connect to host
+drlazarina.net: could not connect to host
 dronexpertos.com: could not connect to host
 droomhuis-in-zuid-holland-kopen.nl: could not connect to host
 dubrovskiy.net: could not connect to host
 dubrovskiy.pro: could not connect to host
 duch.cloud: could not connect to host
 duelsow.eu: could not connect to host
 duks.com.br: could not connect to host
 duo.money: could not connect to host
 duole30.com: could not connect to host
 e-wishlist.net: could not connect to host
 eagleridgecampground.com: could not connect to host
 eatfitoutlet.com.br: could not connect to host
 ebaymotorssucks.com: could not connect to host
+edtech-hub.com: could not connect to host
 eeb98.com: could not connect to host
 eez.ee: could not connect to host
-egbert.net: could not connect to host
 ehuber.info: could not connect to host
 elisabeth-strunz.de: could not connect to host
 elonbase.com: could not connect to host
 elsword.moe: could not connect to host
-emanuelemazzotta.com: could not connect to host
 endlessdiy.ca: could not connect to host
 endspamwith.us: could not connect to host
 engg.ca: could not connect to host
-enriquepiraces.com: could not connect to host
+englishlol.com: could not connect to host
 er-music.com: could not connect to host
 ericdiao.com: could not connect to host
 erspro.net: could not connect to host
 estan.cn: could not connect to host
+estcequejailaflemme.fr: could not connect to host
+etenendrinken.nu: could not connect to host
 eurostrategy.vn.ua: could not connect to host
 eveshaiwu.com: could not connect to host
+evosyn.com: could not connect to host
 exceed.global: could not connect to host
 faber.org.ru: could not connect to host
 facilitrak.com: could not connect to host
 faithwatch.org: could not connect to host
 falkus.net: could not connect to host
+fander.it: could not connect to host
 farm24.co.uk: could not connect to host
 farsil.eu: could not connect to host
-fashion4ever.pl: could not connect to host
-fed51.com: could not connect to host
 feedstringer.com: could not connect to host
 feirlane.org: could not connect to host
 fernangp.com: could not connect to host
 filhomes.ph: could not connect to host
+filme-online.eu.com: could not connect to host
 findmybottleshop.com.au: could not connect to host
 firebaseio.com: could not connect to host
 firexarxa.de: could not connect to host
 first-time-offender.com: could not connect to host
 fixmyglitch.com: could not connect to host
 flow.su: could not connect to host
-flucky.xyz: could not connect to host
 flygpost.com: could not connect to host
 foodserve.in: could not connect to host
 forglemmigej.net: could not connect to host
 foshanshequ.com: could not connect to host
 fossewayflowers.co.uk: could not connect to host
 fossewayflowers.com: could not connect to host
+fossgruppen.se: could not connect to host
 foudufafa.de: could not connect to host
 foxmay.co.uk: could not connect to host
 fr0zenbits.io: could not connect to host
 fragnic.com: could not connect to host
 franckyz.com: could not connect to host
-franksiler.com: could not connect to host
 fransallen.com: could not connect to host
 freaksites.dk: could not connect to host
 fredliang.cn: could not connect to host
 fredtec.ru: could not connect to host
 freelansir.com: could not connect to host
-freesounding.ru: could not connect to host
+freshcode.nl: could not connect to host
 frodriguez.xyz: could not connect to host
 fromlemaytoz.com: could not connect to host
 frosty-gaming.xyz: could not connect to host
 fukuko.biz: could not connect to host
 fukuko.xyz: could not connect to host
 funfunmstdn.tokyo: could not connect to host
 funideas.org: could not connect to host
 funksteckdosen24.de: could not connect to host
 futbolvivo.tv: could not connect to host
-g4w.co: could not connect to host
+fyfywka.com: could not connect to host
 gabriele-kluge.de: could not connect to host
 gaiserik.com: could not connect to host
 gam3rs.de: could not connect to host
 game-gentle.com: could not connect to host
+garanteasy.com: could not connect to host
 gasbarkenora.com: could not connect to host
 gasnews.net: could not connect to host
 gayforgenji.com: could not connect to host
 gaygeeks.de: could not connect to host
 gdevpenze.ru: could not connect to host
 gdhzcgs.com: could not connect to host
+geek.ch: could not connect to host
 geeks.berlin: could not connect to host
 gehrke.nrw: could not connect to host
 generationnext.pl: could not connect to host
 geneve.guide: could not connect to host
 georgescarryout.com: could not connect to host
 getgeek.dk: could not connect to host
 getgeek.ee: could not connect to host
 getgeek.es: could not connect to host
@@ -315,67 +327,75 @@ getgeek.fi: could not connect to host
 getgeek.fr: could not connect to host
 getgeek.io: could not connect to host
 getgeek.no: could not connect to host
 getgeek.nu: could not connect to host
 getgeek.pl: could not connect to host
 getwarden.net: could not connect to host
 gevaulug.fr: could not connect to host
 gfoss.gr: could not connect to host
+gigin.me: could not connect to host
 glasner.photo: could not connect to host
+glbg.eu: could not connect to host
 gmantra.org: could not connect to host
 gnom.me: could not connect to host
 godrive.ga: could not connect to host
+golik.net.pl: could not connect to host
 google: could not connect to host
 gottfridsberg.org: could not connect to host
 goukon.ru: could not connect to host
 gozadentro.com: could not connect to host
 gradsm-ci.net: could not connect to host
+graffen.dk: could not connect to host
 granth.io: could not connect to host
 gratisonlinesex.com: could not connect to host
 greboid.co.uk: could not connect to host
 greboid.com: could not connect to host
 greenroach.ru: could not connect to host
 gritte.net: could not connect to host
 grizzlys.com: could not connect to host
 grog.pw: could not connect to host
-gurochan.ch: could not connect to host
 gvt2.com: could not connect to host
 gvt3.com: could not connect to host
 h3artbl33d.nl: could not connect to host
 hackerchai.com: could not connect to host
 hackingsafe.com: could not connect to host
 halcyonsbastion.com: could not connect to host
 harmfarm.nl: could not connect to host
 hasabig.wang: could not connect to host
 hasalittle.wang: could not connect to host
 hdy.nz: could not connect to host
-heijblok.com: could not connect to host
 heisenberg.co: could not connect to host
 hellomouse.tk: could not connect to host
 helpantiaging.com: could not connect to host
 helsingfors.guide: could not connect to host
 henriknoerr.com: could not connect to host
 hentaimaster.net: could not connect to host
 here.ml: could not connect to host
+hg0088.vip: could not connect to host
+hg718.com: could not connect to host
 hg881.com: could not connect to host
+higilopocht.li: could not connect to host
 hiraku.me: could not connect to host
 homophoni.com: could not connect to host
 hoodoo.io: could not connect to host
 hoodoo.tech: could not connect to host
-horeizai.net: could not connect to host
 horvathd.eu: could not connect to host
 hudingyuan.cn: could not connect to host
 hukkatavara.com: could not connect to host
+hydra.zone: could not connect to host
+iactu.info: could not connect to host
 ibase.com: could not connect to host
 ictpro.info: could not connect to host
 iec.pe: could not connect to host
 ifxnet.com: could not connect to host
 ikenmeyer.eu: could not connect to host
 ileat.com: could not connect to host
+image.tf: could not connect to host
+imgencrypt.com: could not connect to host
 imperdintechnologies.com: could not connect to host
 inexpensivecomputers.net: could not connect to host
 informatik.zone: could not connect to host
 ingalls.run: could not connect to host
 injust.me: could not connect to host
 inscript.pl: could not connect to host
 insouciant.org: could not connect to host
 installgentoo.net: could not connect to host
@@ -384,32 +404,33 @@ isamiok.com: could not connect to host
 issuesofconcern.in: could not connect to host
 itilo.de: could not connect to host
 itpro-mg.de: could not connect to host
 itproject.guru: could not connect to host
 ivanpolchenko.com: could not connect to host
 ixio.cz: could not connect to host
 jaaxypro.com: could not connect to host
 jakincode.army: could not connect to host
+jan-rieger.de: could not connect to host
 japan4you.org: could not connect to host
 jaredfraser.com: could not connect to host
 javascriptlab.fr: could not connect to host
-jayharris.ca: could not connect to host
 jbrowndesign.me: could not connect to host
 jean-remy.ch: could not connect to host
+jens.hk: could not connect to host
 jeremyc.ca: could not connect to host
 jhburton.co.uk: could not connect to host
 jie.dance: could not connect to host
 jobmedic.com: could not connect to host
 joecod.es: could not connect to host
 johand.io: could not connect to host
 jonathansanchez.pro: could not connect to host
 jonpads.com: could not connect to host
 joostbovee.nl: could not connect to host
-jornalalerta.com.br: could not connect to host
+jorovik.com: could not connect to host
 juliawebber.co.za: could not connect to host
 just-pools.co.za: could not connect to host
 justmy.website: could not connect to host
 juventusmania1897.com: could not connect to host
 kabus.org: could not connect to host
 kaika-facilitymanagement.de: could not connect to host
 kamikaichimaru.com: could not connect to host
 kapo.info: could not connect to host
@@ -417,152 +438,158 @@ karanlyons.com: could not connect to hos
 karuneshjohri.com: could not connect to host
 katzen.me: could not connect to host
 kawaiiku.com: could not connect to host
 kawaiiku.de: could not connect to host
 kelm.me: could not connect to host
 kenrogers.co: could not connect to host
 kenvix.com: could not connect to host
 keyihao.cn: could not connect to host
+kibibit.net: could not connect to host
 kieranweightman.me: could not connect to host
 kinepolis-studio.ga: could not connect to host
 kitchenaccessories.pro: could not connect to host
 kjchernov.info: could not connect to host
 kjoglum.me: could not connect to host
+kleinreich.de: could not connect to host
 kngk-azs.ru: could not connect to host
 knownsec.cf: could not connect to host
 koketteriet.se: could not connect to host
 kollawat.me: could not connect to host
+komget.net: could not connect to host
 konicaprinterdriver.com: could not connect to host
 konventseliten.se: could not connect to host
 kopfsalat.eu: could not connect to host
 kopular.com: could not connect to host
 kousaku.jp: could not connect to host
 kozmik.co: could not connect to host
 kpvpn.com: could not connect to host
-krag.be: could not connect to host
 kteen.info: could not connect to host
 kylling.io: could not connect to host
 l18.io: could not connect to host
 laboutiquemarocaineduconvoyeur.ma: could not connect to host
 lacasa.fr: could not connect to host
 lachawoj.de: could not connect to host
+larptreff.de: could not connect to host
 lathamlabs.com: could not connect to host
 lathamlabs.net: could not connect to host
 lathamlabs.org: could not connect to host
 lavapot.com: could not connect to host
 lawformt.com: could not connect to host
 lazulu.com: could not connect to host
 lcti.biz: could not connect to host
 ldcraft.pw: could not connect to host
+ldvsoft.net: could not connect to host
 lebal.se: could not connect to host
 legaltip.eu: could not connect to host
 legitaxi.com: could not connect to host
 leifdreizler.com: could not connect to host
 leiming.co: could not connect to host
 leninalbertop.com.ve: could not connect to host
 leonardcamacho.me: could not connect to host
 leveredge.net: could not connect to host
 lezdomsm.com: could not connect to host
 lheinrich.org: could not connect to host
-libbitcoin.org: could not connect to host
+liceserv.com: could not connect to host
 lifenexto.com: could not connect to host
 likenosis.com: could not connect to host
 lingerieonline.com.br: could not connect to host
 linksanitizer.com: could not connect to host
 linksextremist.at: could not connect to host
 linuxcommand.ru: could not connect to host
+linuxwebservertips.in: could not connect to host
 linvx.org: could not connect to host
 lissabon.guide: could not connect to host
 littleservice.cn: could not connect to host
 litz.ca: could not connect to host
 litzenberger.ca: could not connect to host
 liukang.tech: could not connect to host
-liul.in: could not connect to host
 livnev.me: could not connect to host
 lobosdomain.no-ip.info: could not connect to host
-localhorst.xyz: could not connect to host
 locker3.com: could not connect to host
 logcat.info: could not connect to host
+logement.com: could not connect to host
 logic8.ml: could not connect to host
+longhorn-imports.com: could not connect to host
 lookyman.net: could not connect to host
-loss.no: could not connect to host
 lovelytimes.net: could not connect to host
 luav.org: could not connect to host
-lubomirkazakov.com: could not connect to host
 lukasunger.cz: could not connect to host
 lukasunger.net: could not connect to host
 luxonetwork.com: could not connect to host
-luzat.com: could not connect to host
 m4g.ru: could not connect to host
 maartenterpstra.xyz: could not connect to host
 macedopesca.com.br: could not connect to host
+madoka.nu: could not connect to host
 madrants.net: could not connect to host
 magnacumlaude.co: could not connect to host
-maik-mahlow.de: could not connect to host
 mail4geek.com: could not connect to host
+mainzelmaennchen.net: could not connect to host
 marketingdesignu.cz: could not connect to host
 martin-mattel.com: could not connect to host
 marvinkeller.de: could not connect to host
 mastodon.my: could not connect to host
-matcha-iga.jp: could not connect to host
 mathijskingma.nl: could not connect to host
+matthewkenny.co.uk: could not connect to host
 mattwb65.com: could not connect to host
-mazzotta.me: could not connect to host
 mcdanieldevelopmentservices.com: could not connect to host
 mchopkins.net: could not connect to host
 me-dc.com: could not connect to host
 meanevo.com: could not connect to host
 mecanicadom.com: could not connect to host
 mediadandy.com: could not connect to host
 melonstudios.net: could not connect to host
 mentax.net: could not connect to host
 mes10doigts.ovh: could not connect to host
 metachris.com: could not connect to host
 metrobriefs.com: could not connect to host
 mhjuma.com: could not connect to host
+michaelsulzer.com: could not connect to host
+michaelsulzer.eu: could not connect to host
+minantavla.se: could not connect to host
+minesouls.fr: could not connect to host
 mingy.ddns.net: could not connect to host
 minitruckin.net: could not connect to host
 mirodasilva.be: could not connect to host
+mistybox.com: could not connect to host
 miyugirls.com: could not connect to host
 mkfs.fr: could not connect to host
-mmstick.tk: could not connect to host
 modded-minecraft-server-list.com: could not connect to host
 moe-max.jp: could not connect to host
+moin.jp: could not connect to host
 moobo.xyz: could not connect to host
 mooselook.de: could not connect to host
 morotech.com.br: could not connect to host
 mosaique-lachenaie.fr: could not connect to host
 moskva.guide: could not connect to host
-motherboard.services: could not connect to host
 motomorgen.com: could not connect to host
 motorbiketourhanoi.com: could not connect to host
 mountainadventureseminars.com: could not connect to host
 mowalls.net: could not connect to host
 mpserver12.org: could not connect to host
 mrliu.me: could not connect to host
 mtn.cc: could not connect to host
+muga.space: could not connect to host
 munduch.cz: could not connect to host
 muslimbanter.co.za: could not connect to host
 mybeautyjobs.de: could not connect to host
 mycustomwriting.com: could not connect to host
 myfrenchtattoo.fr: could not connect to host
-n0099.cf: could not connect to host
 naphex.rocks: could not connect to host
 narodsovety.ru: could not connect to host
 natanaelys.com: could not connect to host
 nauck.org: could not connect to host
 ncdesigns-studio.com: could not connect to host
 nedcf.org.uk: could not connect to host
 neer.io: could not connect to host
+nestor.nu: could not connect to host
 netbrief.ml: could not connect to host
 netica.fr: could not connect to host
 netulo.com: could not connect to host
 nevadafiber.net: could not connect to host
-next-log.ru: could not connect to host
 nexuscorporation.in: could not connect to host
 nfluence.org: could not connect to host
 nico.st: could not connect to host
 nienfun.com: could not connect to host
 nikksno.io: could not connect to host
 nikolasbradshaw.com: could not connect to host
 niouininon.eu: could not connect to host
 nirada.info: could not connect to host
@@ -575,80 +602,88 @@ novascan.net: could not connect to host
 novelabs.eu: could not connect to host
 nowremindme.com: could not connect to host
 nsdev.cn: could not connect to host
 nup.pw: could not connect to host
 obdolbacca.ru: could not connect to host
 oberhof.co: could not connect to host
 off-the-clock.us: could not connect to host
 office-ruru.com: could not connect to host
+ogkw.de: could not connect to host
+okmx.de: could not connect to host
 oliverspringer.eu: could not connect to host
+ollies.cloud: could not connect to host
+olliespage.net: could not connect to host
 onewebdev.info: could not connect to host
 onstud.com: could not connect to host
 onwie.fr: could not connect to host
 opengg.me: could not connect to host
+openrainbow.net: could not connect to host
+openrainbow.org: could not connect to host
 openspace.xxx: could not connect to host
-oranges.tokyo: could not connect to host
 oscsdp.cz: could not connect to host
+osterkraenzchen.de: could not connect to host
+osx86spain.com: could not connect to host
 outetc.com: could not connect to host
 oxygaming.com: could not connect to host
 oxymc.com: could not connect to host
 p4chivtac.com: could not connect to host
+pajuvuo.fi: could not connect to host
 panj.ws: could not connect to host
+paradiesgirls.ch: could not connect to host
 pardnoy.com: could not connect to host
 passrhce.com: could not connect to host
 passrhcsa.com: could not connect to host
 patrickbusch.net: could not connect to host
 patrickneuro.de: could not connect to host
-pautadiaria.com: could not connect to host
 pear2pear.de: could not connect to host
 perkbrian.com: could not connect to host
 persjrp.ca: could not connect to host
 persoform.ch: could not connect to host
+petangen.se: could not connect to host
 pgpmail.cc: could not connect to host
 phasme-2016.com: could not connect to host
 philippa.cool: could not connect to host
 picallo.es: could not connect to host
 picone.com.au: could not connect to host
 pinebaylibrary.org: could not connect to host
 pitfire.io: could not connect to host
-pixelbash.de: could not connect to host
 plaasprodukte.com: could not connect to host
 planbox.info: could not connect to host
 playsoundevents.be: could not connect to host
 plussizereviews.com: could not connect to host
 pnsc.is: could not connect to host
 pointagri.com: could not connect to host
 pokalsocial.de: could not connect to host
 polit.im: could not connect to host
 poolinstallers.co.za: could not connect to host
 pouets.ovh: could not connect to host
 powerentertainment.tv: could not connect to host
-prelogica.com.br: could not connect to host
 privcloud.org: could not connect to host
 projectasterk.com: could not connect to host
 provitacare.com: could not connect to host
 proxydesk.eu: could not connect to host
 proxyweb.us: could not connect to host
 psncardplus.be: could not connect to host
 psncardplus.com: could not connect to host
 psncardplus.dk: could not connect to host
 psncardplus.nl: could not connect to host
 psncardplus.se: could not connect to host
-psu.je: could not connect to host
 publimepa.it: could not connect to host
 puhe.se: could not connect to host
 pypa.io: could not connect to host
 pythia.nz: could not connect to host
+q8mp3.me: could not connect to host
 qoqo.us: could not connect to host
 qrforex.com: could not connect to host
 qscloud.de: could not connect to host
 qto.net: could not connect to host
 r0t.co: could not connect to host
 rainbin.com: could not connect to host
+rdns.cc: could not connect to host
 readityourself.net: could not connect to host
 real-compare.com: could not connect to host
 realwoo.com: could not connect to host
 reignsphere.net: could not connect to host
 reismil.ch: could not connect to host
 relsak.cz: could not connect to host
 relvan.com: could not connect to host
 report-to.io: could not connect to host
@@ -660,17 +695,20 @@ reporturl.com: could not connect to host
 reporturl.io: could not connect to host
 reqognize.com: could not connect to host
 ressl.ch: could not connect to host
 retcor.net: could not connect to host
 reth.ch: could not connect to host
 retube.ga: could not connect to host
 reykjavik.guide: could not connect to host
 richeza.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 119"  data: no]
+robin-novotny.com: could not connect to host
+robomonkey.org: could not connect to host
 roeldevries.me: could not connect to host
+roelf.org: could not connect to host
 roguesignal.net: could not connect to host
 rohanbassett.com: could not connect to host
 romainmuller.xyz: could not connect to host
 roolevoi.ru: could not connect to host
 rpgmaker.es: could not connect to host
 rs-devdemo.host: could not connect to host
 rsldb.com: could not connect to host
 rubyist.today: could not connect to host
@@ -680,235 +718,241 @@ runementors.com: could not connect to ho
 ruobiyi.com: could not connect to host
 ruudkoot.nl: could not connect to host
 rxbusiness.com: could not connect to host
 saferedirectlink.com: could not connect to host
 sallysubs.com: could not connect to host
 salzamt.tk: could not connect to host
 samaritan.tech: could not connect to host
 sanatrans.com: could not connect to host
+sanderkoenders.eu: could not connect to host
+sanderkoenders.nl: could not connect to host
 sarndipity.com: could not connect to host
 sbiewald.de: could not connect to host
-scheidtweiler.de: could not connect to host
 sciencemonster.co.uk: could not connect to host
 scm-2017.org: could not connect to host
 sctm.at: could not connect to host
 secitem.de: could not connect to host
 sectest.ml: could not connect to host
 security.xn--q9jyb4c: could not connect to host
 securitysoapbox.com: could not connect to host
 securoswiss.ch: could not connect to host
 sellmoretires.com: could not connect to host
 sep23.ru: could not connect to host
 servfefe.com: could not connect to host
 sesha.co.za: could not connect to host
 shadowplus.net: could not connect to host
 shadowrocket.net: could not connect to host
+shakepeers.org: could not connect to host
 sharevari.com: could not connect to host
+sharingcode.com: could not connect to host
 shavingks.com: could not connect to host
 sheratan.web.id: could not connect to host
 sheying.tm: could not connect to host
 shirakaba-cc.com: could not connect to host
+shishlik.net: could not connect to host
 shopifycloud.com: could not connect to host
 shoppingreview.org: could not connect to host
-sickfile.com: could not connect to host
-siliconchip.me: could not connect to host
+shuro.de: could not connect to host
 simbolo.co.uk: could not connect to host
 simplerses.com: could not connect to host
 siqi.wang: could not connect to host
 skarox.com: could not connect to host
 skarox.net: could not connect to host
 skarox.ru: could not connect to host
 sky-aroma.com: could not connect to host
 skylocker.net: could not connect to host
 skylocker.nl: could not connect to host
+sl1pkn07.wtf: could not connect to host
 slovoice.org: could not connect to host
 smith.is: could not connect to host
 sml.lc: could not connect to host
 socialworkout.com: could not connect to host
 socialworkout.net: could not connect to host
 socialworkout.org: could not connect to host
 socialworkout.tv: could not connect to host
 socketize.com: could not connect to host
 sodiao.cc: could not connect to host
 sojingle.net: could not connect to host
 solos.im: could not connect to host
+somali-derp.com: could not connect to host
 soulema.com: could not connect to host
 soundhunter.xyz: could not connect to host
 sowingseasons.com: could not connect to host
 spicywombat.com: could not connect to host
-spom.net: could not connect to host
 sportsmanadvisor.com: could not connect to host
 sprint.ml: could not connect to host
-squido.ch: could not connect to host
 stadionmanager.com: could not connect to host
 stadtgartenla.com: could not connect to host
 statgram.me: could not connect to host
 static-assets.io: could not connect to host
 stbennett.org: could not connect to host
-stefanovski.io: could not connect to host
 steffi-in-australien.com: could not connect to host
 steven-bennett.com: could not connect to host
 stickswag.cf: could not connect to host
 stilettomoda.com.br: could not connect to host
 stpip.com: could not connect to host
 stressfreehousehold.com: could not connect to host
-stuka-art.de: could not connect to host
 stylle.me: could not connect to host
+suelyonjones.com: could not connect to host
 sulek.eu: could not connect to host
 suneilpatel.com: could not connect to host
 sunjaydhama.com: could not connect to host
 sussexwebdesigns.com: could not connect to host
 sviz.pro: could not connect to host
+swiftconf.com: could not connect to host
 t3rror.net: could not connect to host
 takusan.ru: could not connect to host
 talktwincities.com: could not connect to host
 tdelmas.eu: could not connect to host
 tdelmas.ovh: could not connect to host
 tdsb.cf: could not connect to host
 tdsbhack.tk: could not connect to host
 techask.it: could not connect to host
+techcavern.ml: could not connect to host
 techpit.us: could not connect to host
 telugu4u.net: could not connect to host
 tenispopular.com: could not connect to host
 teracloud.at: could not connect to host
 terminalvelocity.co.nz: could not connect to host
 terrax.net: could not connect to host
 tetsai.com: could not connect to host
 theprivacysolution.com: could not connect to host
 thesehighsandlows.com: could not connect to host
-thesteins.org: could not connect to host
 thinkcash.nl: could not connect to host
-thinktux.net: could not connect to host
 thynx.io: could not connect to host
 tiliaze.info: could not connect to host
 tiliaze.net: could not connect to host
 timysewyn.be: could not connect to host
 tokaido.com: could not connect to host
 topdetoxcleanse.com: could not connect to host
 topnotchendings.com: could not connect to host
 totallynotaserver.com: could not connect to host
 totch.de: could not connect to host
 totot.net: could not connect to host
+touch-up-net.com: could not connect to host
 toxicip.com: could not connect to host
 transcendmotor.sg: could not connect to host
 tsaro.io: could not connect to host
 tucidi.net: could not connect to host
 tumelum.de: could not connect to host
 turn-sticks.com: could not connect to host
 twem.ddns.net: could not connect to host
 twiri.net: could not connect to host
 twotube.ie: could not connect to host
 tyil.work: could not connect to host
 tykoon.com: could not connect to host
-u.nu: could not connect to host
-uberboxen.net: could not connect to host
 udo-luetkemeier.de: could not connect to host
 uevan.com: could not connect to host
 umsapi.com: could not connect to host
 unhu.fr: could not connect to host
 unicorn.li: could not connect to host
 unsupervised.ca: could not connect to host
 untoldstory.eu: could not connect to host
 urbackups.com: could not connect to host
-uscp8.com: could not connect to host
 uwesander.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 119"  data: no]
 vadik.me: could not connect to host
 valshamar.is: could not connect to host
-valtoaho.com: could not connect to host
 vanderstraeten.dynv6.net: could not connect to host
 vapehour.com: could not connect to host
 vapeshopsupply.com: could not connect to host
 varela-electricite.fr: could not connect to host
 venmos.com: could not connect to host
 versfin.net: could not connect to host
+verzick.com: could not connect to host
 vgatest.nl: could not connect to host
 vinetalk.net: could not connect to host
 visiontree.eu: could not connect to host
 vlogge.com: could not connect to host
 vmug.pl: could not connect to host
+vozami.com: could not connect to host
 vrtouring.org: could not connect to host
 vsx.ch: could not connect to host
 vxapps.com: could not connect to host
 w4.no: could not connect to host
 waixingrenfuli.vip: could not connect to host
-wallpapers.pub: could not connect to host
 wanashi.com: could not connect to host
+warekon.com: could not connect to host
+warekon.dk: could not connect to host
 warlions.info: could not connect to host
 warp-radio.com: could not connect to host
 warp-radio.tv: could not connect to host
 watchweasel.com: could not connect to host
 we.serveftp.net: could not connect to host
 weareincognito.org: could not connect to host
 webart-factory.de: could not connect to host
 webcatechism.com: could not connect to host
 webdesigneauclaire.com: could not connect to host
 webhackspro.com: could not connect to host
+webreslist.com: could not connect to host
 webtech.com.br: could not connect to host
 webthings.com.br: could not connect to host
 wecanvisit.com: could not connect to host
-weed.ren: could not connect to host
-wekibe.de: could not connect to host
+weirdserver.com: could not connect to host
 welby.cat: could not connect to host
 welcomehelp.de: could not connect to host
 werhatunsverraten.eu: could not connect to host
 werkkrew.xyz: could not connect to host
 wessner.org: could not connect to host
 wetthost.com: could not connect to host
+whey-protein.ch: could not connect to host
 whilsttraveling.com: could not connect to host
 winnersports.co: could not connect to host
+wipply.com: could not connect to host
 wireframesoftware.com: could not connect to host
 wissl.org: could not connect to host
+wizznab.tk: could not connect to host
+wjglerum.nl: could not connect to host
 wolfemg.com: could not connect to host
 wolfenland.net: could not connect to host
 woomu.me: could not connect to host
 wooplagaming.com: could not connect to host
 workemy.com: could not connect to host
-worldfree4.org: could not connect to host
 wp-fastsearch.de: could not connect to host
 wp6.pw: could not connect to host
 wriedts.de: could not connect to host
 wwv-8522.com: could not connect to host
 www-8887999.com: could not connect to host
 www.re: could not connect to host
 www.sb: could not connect to host
 www.simbolo.co.uk: could not connect to host
 xia100.xyz: could not connect to host
 xiaoyu.net: could not connect to host
 xing.ml: could not connect to host
 xn--8mr166hf6s.xn--fiqs8s: could not connect to host
 xn--yj8h0m.ws: could not connect to host
+xps2pdf.co.uk: could not connect to host
 xqin.net: could not connect to host
 xtremenutrition.com.br: could not connect to host
 xwaretech.info: could not connect to host
 yabrt.cn: could not connect to host
 yaucy.win: could not connect to host
 yffengshi.ml: could not connect to host
 yoga.is-an-engineer.com: could not connect to host
+yum.beer: could not connect to host
 yux.fr: could not connect to host
 yvesx.com: could not connect to host
 zaoext.com: could not connect to host
 zby.io: could not connect to host
 zeloz.xyz: could not connect to host
 zenghx.tk: could not connect to host
 zerosource.net: could not connect to host
 zhangfangzhou.com: could not connect to host
 zhiin.net: could not connect to host
 zorz.info: could not connect to host
 ztytian.com: could not connect to host
 zuefle.net: could not connect to host
-zukix.com: could not connect to host
 zulu7.com: could not connect to host
 zuviel.space: could not connect to host
 zzw.ca: could not connect to host
 0005.com: could not connect to host
 0005aa.com: could not connect to host
 007sascha.de: did not receive HSTS header
 020wifi.nl: [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 119"  data: no]
-0222aa.com: did not receive HSTS header
+0222aa.com: could not connect to host
 048.ag: could not connect to host
 050508.com: could not connect to host
 0f.io: could not connect to host
 0g.org.uk: could not connect to host
 0o0.ooo: could not connect to host
 0p.no: did not receive HSTS header
 0w0.vc: could not connect to host
 0x0a.net: could not connect to host
@@ -933,25 +977,23 @@ 123.gg: could not connect to host
 123share.org: could not connect to host
 123test.de: did not receive HSTS header
 123test.es: did not receive HSTS header
 123test.fr: did not receive HSTS header
 126ium.moe: could not connect to host
 127011-networks.ch: could not connect to host
 12vpn.org: could not connect to host
 12vpnchina.com: could not connect to host
-1391kj.com: did not receive HSTS header
-1396.cc: did not receive HSTS header
 1396.net: could not connect to host
 1536.cf: could not connect to host
 163pwd.com: could not connect to host
 166166.com: could not connect to host
 16deza.com: did not receive HSTS header
 16packets.com: could not connect to host
-173vpn.cn: could not connect to host
+173vpn.cn: did not receive HSTS header
 173vpns.com: did not receive HSTS header
 188betwarriors.co.uk: could not connect to host
 188trafalgar.ca: did not receive HSTS header
 195gm.com: could not connect to host
 1a-jva.de: could not connect to host
 1atic.com: could not connect to host
 1co-jp.net: did not receive HSTS header
 1cover.com: could not connect to host
@@ -972,17 +1014,17 @@ 25daysof.io: could not connect to host
 2859cc.com: could not connect to host
 2acbi-asso.fr: did not receive HSTS header
 2bizi.ru: could not connect to host
 2brokegirls.org: could not connect to host
 2carpros.com: did not receive HSTS header
 2intermediate.co.uk: did not receive HSTS header
 2or3.tk: could not connect to host
 2smart4food.com: did not receive HSTS header
-2ss.jp: could not connect to host
+2ss.jp: did not receive HSTS header
 300651.ru: did not receive HSTS header
 300m.com: did not receive HSTS header
 300mbmovie24.com: did not receive HSTS header
 300mbmovies4u.cc: could not connect to host
 301.website: could not connect to host
 302.nyc: could not connect to host
 314166.com: could not connect to host
 32ph.com: could not connect to host
@@ -1015,16 +1057,17 @@ 4cclothing.com: could not connect to hos
 4elements.com: did not receive HSTS header
 4eyes.ch: did not receive HSTS header
 4miners.net: could not connect to host
 4mybaby.ch: did not receive HSTS header
 4ourty2.org: did not receive HSTS header
 4sqsu.eu: could not connect to host
 4w-performers.link: could not connect to host
 50millionablaze.org: could not connect to host
+513vpn.net: did not receive HSTS header
 517vpn.cn: could not connect to host
 518maicai.com: did not receive HSTS header
 540.co: did not receive HSTS header
 54bf.com: could not connect to host
 56ct.com: could not connect to host
 5piecesofadvice.com: could not connect to host
 5w5.la: could not connect to host
 60ych.net: did not receive HSTS header
@@ -1226,17 +1269,17 @@ aka.my: did not receive HSTS header
 akboy.pw: could not connect to host
 akclinics.org: did not receive HSTS header
 akerek.hu: could not connect to host
 akgundemirbas.com: could not connect to host
 akhilindurti.com: could not connect to host
 akkadia.cc: could not connect to host
 akombakom.net: could not connect to host
 akselimedia.fi: did not receive HSTS header
-akstudentsfirst.org: could not connect to host
+akstudentsfirst.org: did not receive HSTS header
 aktivist.in: did not receive HSTS header
 al-shami.net: could not connect to host
 aladdin.ie: did not receive HSTS header
 alanlee.net: could not connect to host
 alanrickmanflipstable.com: could not connect to host
 alariel.de: did not receive HSTS header
 alarme-gps.ch: could not connect to host
 alarmegps.ch: could not connect to host
@@ -1446,17 +1489,16 @@ arbu.eu: max-age too low: 2419200
 ardao.me: could not connect to host
 ardorlabs.se: could not connect to host
 arewedubstepyet.com: did not receive HSTS header
 areyouever.me: did not receive HSTS header
 argennon.xyz: could not connect to host
 arguggi.co.uk: could not connect to host
 ariacreations.net: did not receive HSTS header
 arislight.com: did not receive HSTS header
-aristilabs.com: did not receive HSTS header
 arlen.io: could not connect to host
 arlen.se: could not connect to host
 armingrodon.de: max-age too low: 0
 armor.com: did not receive HSTS header
 armored.ninja: could not connect to host
 armory.consulting: could not connect to host
 armory.supplies: could not connect to host
 armsday.com: could not connect to host
@@ -1473,22 +1515,21 @@ ars-design.net: could not connect to hos
 art2web.net: could not connect to host
 artartefatos.com.br: could not connect to host
 artesupra.com: did not receive HSTS header
 arthan.me: could not connect to host
 artifex21.com: could not connect to host
 artifex21.fr: could not connect to host
 artiming.com: could not connect to host
 artisavotins.com: could not connect to host
-artisphere.ch: did not receive HSTS header
 artistnetwork.nl: did not receive HSTS header
 arto.bg: did not receive HSTS header
 arturkohut.com: could not connect to host
 arvamus.eu: could not connect to host
-arzaroth.com: did not receive HSTS header
+arzaroth.com: could not connect to host
 as.se: could not connect to host
 as9178.net: could not connect to host
 asahikoji.net: could not connect to host
 asasuou.pw: could not connect to host
 asc16.com: could not connect to host
 ascamso.com: could not connect to host
 aschaefer.net: could not connect to host
 asdpress.cn: could not connect to host
@@ -1632,17 +1673,17 @@ bandb.xyz: could not connect to host
 bandrcrafts.com: did not receive HSTS header
 bangzafran.com: max-age too low: 36000
 banksaround.com: did not receive HSTS header
 banqingdiao.com: could not connect to host
 baobaobooks.net: did not receive HSTS header
 barely.sexy: did not receive HSTS header
 bariller.fr: could not connect to host
 barrelhead.org: could not connect to host
-barrut.me: did not receive HSTS header
+barrut.me: could not connect to host
 barshout.co.uk: could not connect to host
 barss.io: could not connect to host
 bartbania.com: did not receive HSTS header
 barunisystems.com: could not connect to host
 bashcode.ninja: could not connect to host
 basicsolutionsus.com: did not receive HSTS header
 basilisk.io: could not connect to host
 bassh.net: did not receive HSTS header
@@ -1718,16 +1759,17 @@ berlatih.com: did not receive HSTS heade
 berlinleaks.com: could not connect to host
 bernieware.de: could not connect to host
 berrymark.be: max-age too low: 0
 besixdouze.world: could not connect to host
 besola.de: did not receive HSTS header
 bestbeards.ca: could not connect to host
 bestcellular.com: did not receive HSTS header
 besthost.cz: did not receive HSTS header
+bestmodels.su: did not receive HSTS header
 bestof1001.de: did not receive HSTS header
 bestorangeseo.com: could not connect to host
 betaclean.fr: did not receive HSTS header
 betafive.net: could not connect to host
 betakah.net: could not connect to host
 betcafearena.ro: did not receive HSTS header
 bethanyduke.com: max-age too low: 7776000
 bethditto.com: did not receive HSTS header
@@ -1783,17 +1825,16 @@ bimbo.com: did not receive HSTS header
 binaryfigments.com: max-age too low: 86400
 binderapp.net: could not connect to host
 bioespuna.eu: did not receive HSTS header
 biofam.ru: did not receive HSTS header
 bioknowme.com: did not receive HSTS header
 bionicspirit.com: could not connect to host
 biophysik-ssl.de: did not receive HSTS header
 birkman.com: did not receive HSTS header
-biscoint.io: did not receive HSTS header
 bismarck.moe: did not receive HSTS header
 bisterfeldt.com: could not connect to host
 bitbit.org: did not receive HSTS header
 bitchan.it: could not connect to host
 bitcoinprivacy.net: did not receive HSTS header
 bitcoinworld.me: could not connect to host
 bitconcepts.co.uk: could not connect to host
 biteoftech.com: did not receive HSTS header
@@ -1932,19 +1973,17 @@ brix.ninja: did not receive HSTS header
 brks.xyz: could not connect to host
 broken-oak.com: could not connect to host
 brookechase.com: did not receive HSTS header
 browserid.org: could not connect to host
 brrd.io: did not receive HSTS header
 brunix.net: did not receive HSTS header
 brunohenc.from.hr: did not receive HSTS header
 brunoonline.co.uk: could not connect to host
-bryanquigley.com: did not receive HSTS header
 bryn.xyz: could not connect to host
-bsagan.fr: could not connect to host
 bsdtips.com: could not connect to host
 bsociabl.com: could not connect to host
 btc-e.com: did not receive HSTS header
 btcdlc.com: could not connect to host
 buben.tech: did not receive HSTS header
 bubulazi.com: did not receive HSTS header
 bubulazy.com: did not receive HSTS header
 buch-cuber.de: max-age too low: 0
@@ -1982,16 +2021,17 @@ burian-server.cz: could not connect to h
 burningcrash.de: max-age too low: 600000
 burpsuite.site: could not connect to host
 burrow.ovh: could not connect to host
 burrowingsec.com: could not connect to host
 burtrum.me: could not connect to host
 burtrum.top: could not connect to host
 buryat-mongol.cf: could not connect to host
 business.lookout.com: could not connect to host
+businessadviceperth.com.au: did not receive HSTS header
 businesshosting.nl: did not receive HSTS header
 businessloanconnection.org: did not receive HSTS header
 busold.ws: could not connect to host
 bustimes.org: could not connect to host
 butchersworkshop.com: did not receive HSTS header
 butian518.com: did not receive HSTS header
 buttercoin.com: could not connect to host
 butterfieldstraining.com: did not receive HSTS header
@@ -2018,19 +2058,19 @@ bypassed.host: could not connect to host
 bypassed.me: could not connect to host
 bypassed.online: could not connect to host
 bypassed.org: did not receive HSTS header
 bypassed.party: could not connect to host
 bypassed.press: could not connect to host
 bypassed.pw: could not connect to host
 bypassed.rocks: could not connect to host
 bypassed.site: could not connect to host
-bypassed.today: did not receive HSTS header
-bypassed.works: did not receive HSTS header
-bypassed.world: did not receive HSTS header
+bypassed.today: could not connect to host
+bypassed.works: could not connect to host
+bypassed.world: could not connect to host
 bypro.xyz: could not connect to host
 bysymphony.com: max-age too low: 0
 byte-time.com: did not receive HSTS header
 byte.chat: could not connect to host
 byte.wtf: did not receive HSTS header
 bytepark.de: did not receive HSTS header
 bytesatwork.eu: could not connect to host
 bytesund.biz: could not connect to host
@@ -2162,16 +2202,17 @@ cfcnexus.org: could not connect to host
 cfcproperties.com: did not receive HSTS header
 cfetengineering.com: could not connect to host
 cfoitplaybook.com: could not connect to host
 cganx.org: could not connect to host
 cgerstner.eu: could not connect to host
 cgsshelper.tk: could not connect to host
 chahub.com: could not connect to host
 chainmonitor.com: could not connect to host
+champ.dog: did not receive HSTS header
 championsofregnum.com: did not receive HSTS header
 chancat.blog: max-age too low: 2592000
 chandlerredding.com: did not receive HSTS header
 changetip.com: did not receive HSTS header
 chanshiyu.com: did not receive HSTS header
 chaos.fail: did not receive HSTS header
 chaoswebs.net: did not receive HSTS header
 charityclear.com: did not receive HSTS header
@@ -2193,16 +2234,17 @@ chebedara.com: could not connect to host
 checkout.google.com: did not receive HSTS header (error ignored - included regardless)
 cheerflow.com: could not connect to host
 cheesetart.my: could not connect to host
 cheetah85.de: could not connect to host
 chefgalles.com.br: could not connect to host
 chejianer.cn: could not connect to host
 chenfengyi.com: could not connect to host
 chensir.net: could not connect to host
+chentianyi.cn: did not receive HSTS header
 chepaofen.com: did not receive HSTS header
 cherekerry.com: could not connect to host
 cherysunzhang.com: did not receive HSTS header
 chestnut.cf: did not receive HSTS header
 chiamata-aiuto.ch: could not connect to host
 chib.chat: could not connect to host
 chihiro.xyz: did not receive HSTS header
 chijiokeindustries.co.uk: could not connect to host
@@ -2251,16 +2293,17 @@ cimalando.eu: could not connect to host
 cinartelorgu.com: did not receive HSTS header
 cintdirect.com: could not connect to host
 cioconference.co.nz: could not connect to host
 ciplanutrition.com: did not receive HSTS header
 cirrohost.com: did not receive HSTS header
 ciscohomeanalytics.com: could not connect to host
 ciscommerce.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 119"  data: no]
 citiagent.cz: could not connect to host
+citizenspact.eu: did not receive HSTS header
 cityoflaurel.org: did not receive HSTS header
 cium.ru: could not connect to host
 cjcaron.org: could not connect to host
 cktennis.com: did not receive HSTS header
 claimit.ml: could not connect to host
 clan-ww.com: did not receive HSTS header
 clara-baumert.de: could not connect to host
 claralabs.com: did not receive HSTS header
@@ -2358,36 +2401,35 @@ cohesive.io: did not receive HSTS header
 coinbit.trade: did not receive HSTS header
 coindam.com: could not connect to host
 coldlostsick.net: could not connect to host
 colearnr.com: could not connect to host
 collabra.email: did not receive HSTS header
 collard.tk: did not receive HSTS header
 collectosaurus.com: did not receive HSTS header
 collegepulse.org: could not connect to host
-collies.eu: max-age too low: 3
+collies.eu: could not connect to host
 collins.press: did not receive HSTS header
 collinsartworks.com: did not receive HSTS header
 collision.fyi: could not connect to host
 colmexpro.com: did not receive HSTS header
 colognegaming.net: could not connect to host
 coloradocomputernetworking.net: could not connect to host
-colorectalcompounding.com: did not receive HSTS header
 colorlib.com: did not receive HSTS header
 colorunhas.com.br: could not connect to host
-cometonovascotia.ca: did not receive HSTS header
 comfortdom.ua: did not receive HSTS header
 comfortticket.de: did not receive HSTS header
 comfy.cafe: did not receive HSTS header
 comfy.moe: did not receive HSTS header
 comicspines.com: could not connect to host
 comitesaustria.at: could not connect to host
 comiteshopping.com: could not connect to host
 commercialplanet.eu: could not connect to host
 commune-preuilly.fr: did not receive HSTS header
+comocurarlashemorroidesya.com: did not receive HSTS header
 comotalk.com: could not connect to host
 compalytics.com: could not connect to host
 comparamejor.com: did not receive HSTS header
 compareinsurance.com.au: did not receive HSTS header
 comparejewelleryprices.co.uk: could not connect to host
 comparetravelinsurance.com.au: did not receive HSTS header
 compassionate-biology.com: could not connect to host
 compiledworks.com: could not connect to host
@@ -2416,17 +2458,17 @@ console.support: did not receive HSTS he
 contactbig.com: did not receive HSTS header
 contactsingapore.sg: did not receive HSTS header
 contaimo.com: did not receive HSTS header
 container-lion.com: did not receive HSTS header
 containerstatistics.com: could not connect to host
 contarkos.xyz: could not connect to host
 continuumgaming.com: could not connect to host
 controlcenter.gigahost.dk: did not receive HSTS header
-convert.zone: did not receive HSTS header
+convert.zone: could not connect to host
 cooink.net: could not connect to host
 coolaj86.com: did not receive HSTS header
 coolchevy.org.ua: did not receive HSTS header
 coole-meister.de: could not connect to host
 coolrc.me: could not connect to host
 cooxa.com: did not receive HSTS header
 copshop.com.br: could not connect to host
 cor-ser.es: could not connect to host
@@ -2452,17 +2494,16 @@ corruption-rsps.net: could not connect t
 corruption-server.net: could not connect to host
 costow.club: could not connect to host
 count.sh: could not connect to host
 couponcodeq.com: could not connect to host
 couragewhispers.ca: could not connect to host
 coursdeprogrammation.com: could not connect to host
 coursella.com: did not receive HSTS header
 covenantbank.net: could not connect to host
-coverdat.com: did not receive HSTS header
 coverduck.ru: could not connect to host
 cpuvinf.eu.org: could not connect to host
 cracking.org: did not receive HSTS header
 craftbeerbarn.co.uk: could not connect to host
 craftedge.xyz: could not connect to host
 craftmain.eu: could not connect to host
 cranems.com.ua: did not receive HSTS header
 cranioschule.com: did not receive HSTS header
@@ -2727,26 +2768,26 @@ detector.exposed: could not connect to h
 detest.org: could not connect to host
 detutorial.com: did not receive HSTS header
 deuxvia.com: could not connect to host
 dev: could not connect to host
 dev-aegon.azurewebsites.net: did not receive HSTS header
 dev-bluep.pantheonsite.io: did not receive HSTS header
 devcu.com: could not connect to host
 devcu.net: could not connect to host
-develop.cool: did not receive HSTS header
 develop.fitness: could not connect to host
 devh.net: could not connect to host
 devincrow.me: could not connect to host
 devisonline.ch: could not connect to host
 devmsg.com: did not receive HSTS header
 devnsec.com: could not connect to host
 devnull.team: could not connect to host
 devopps.me: did not receive HSTS header
 devopsconnected.com: could not connect to host
+devstaff.gr: did not receive HSTS header
 devtub.com: did not receive HSTS header
 devuan.org: did not receive HSTS header
 dewebwerf.nl: did not receive HSTS header
 dewin.io: could not connect to host
 dfrance.com.br: could not connect to host
 dfviana.com.br: max-age too low: 2592000
 dhaynes.xyz: could not connect to host
 dhpcs.com: did not receive HSTS header
@@ -2883,17 +2924,17 @@ doujin.nagoya: could not connect to host
 dovecotadmin.org: could not connect to host
 doveholesband.co.uk: did not receive HSTS header
 dovetailnow.com: could not connect to host
 download.jitsi.org: did not receive HSTS header
 downsouthweddings.com.au: could not connect to host
 doxcelerate.com: max-age too low: 69
 drach.xyz: did not receive HSTS header
 dragonisles.net: could not connect to host
-dragons-of-highlands.cz: could not connect to host
+dragons-of-highlands.cz: did not receive HSTS header
 dragonsmoke.cloud: could not connect to host
 dragonstower.net: could not connect to host
 dragonteam.ninja: could not connect to host
 drakefortreasurer.sexy: could not connect to host
 drakenson.de: did not receive HSTS header
 dralexjimenez.com: did not receive HSTS header
 drastosasports.com.br: could not connect to host
 draw.uy: could not connect to host
@@ -2903,16 +2944,17 @@ dreamcatcherblog.de: could not connect t
 dreamlighteyeserum.com: could not connect to host
 dreamsforabetterworld.com.au: did not receive HSTS header
 drewgle.net: could not connect to host
 drhopeson.com: could not connect to host
 drinknaturespower.com: could not connect to host
 drinkvabeer.com: could not connect to host
 drishti.guru: could not connect to host
 drivercopilot.com: could not connect to host
+drogueriaelbarco.com: did not receive HSTS header
 droidboss.com: did not receive HSTS header
 droncentrum.pl: could not connect to host
 droomhuis-in-brielle-kopen.nl: could not connect to host
 droomhuis-in-de-friese-meren-kopen.nl: could not connect to host
 droomhuis-in-delfzijl-kopen.nl: could not connect to host
 droomhuis-in-friesland-kopen.nl: could not connect to host
 droomhuis-in-laren-kopen.nl: could not connect to host
 droomhuis-in-pekela-kopen.nl: could not connect to host
@@ -2933,16 +2975,17 @@ dshiv.io: could not connect to host
 dtub.co: could not connect to host
 dualias.xyz: did not receive HSTS header
 dubik.su: did not receive HSTS header
 dudesunderwear.com.br: could not connect to host
 duelysthub.com: could not connect to host
 duerls.de: did not receive HSTS header
 dukec.me: could not connect to host
 dullsir.com: did not receive HSTS header
+dune.io: did not receive HSTS header
 dungi.org: could not connect to host
 duongpho.com: did not receive HSTS header
 duskopy.top: could not connect to host
 dutchessuganda.com: did not receive HSTS header
 dutchrank.com: did not receive HSTS header
 duuu.ch: could not connect to host
 dycontrol.de: could not connect to host
 dylanscott.com.au: did not receive HSTS header
@@ -3010,16 +3053,17 @@ edelblack.ch: could not connect to host
 edelsteincosmetic.com: did not receive HSTS header
 eden-noel.at: could not connect to host
 edenaya.com: did not receive HSTS header
 edgereinvent.com: did not receive HSTS header
 ediscomp.sk: did not receive HSTS header
 edissecurity.sk: did not receive HSTS header
 edix.ru: could not connect to host
 edk.com.tr: did not receive HSTS header
+edlinus.cn: did not receive HSTS header
 edmodo.com: did not receive HSTS header
 edpubs.gov: did not receive HSTS header
 eduardnikolenko.ru: could not connect to host
 educatio.tech: could not connect to host
 educourse.ga: could not connect to host
 eduvance.in: did not receive HSTS header
 eengezinswoning-in-alphen-aan-den-rijn-kopen.nl: could not connect to host
 eengezinswoning-in-de-friese-meren-kopen.nl: could not connect to host
@@ -3084,22 +3128,22 @@ elpay.kz: did not receive HSTS header
 elpo.xyz: could not connect to host
 elsamakhin.com: could not connect to host
 elsemanario.com: did not receive HSTS header
 elsitar.com: could not connect to host
 email.lookout.com: could not connect to host
 email2rss.net: could not connect to host
 emanatepixels.com: could not connect to host
 emanga.su: did not receive HSTS header
+emanuelemazzotta.com: did not receive HSTS header
 embroidered-stuff.com: could not connect to host
 emeldi-commerce.com: max-age too low: 0
 emesolutions.net: did not receive HSTS header
 emiele.com.br: could not connect to host
 emilyhorsman.com: did not receive HSTS header
-emilyjohnson.ga: did not receive HSTS header
 eminovic.me: could not connect to host
 emjainteractive.com: did not receive HSTS header
 emjimadhu.com: could not connect to host
 emmable.com: could not connect to host
 emmaliddell.com: could not connect to host
 emnitech.com: could not connect to host
 empleosentorreon.mx: could not connect to host
 empleostampico.com: did not receive HSTS header
@@ -3275,17 +3319,16 @@ eztv.ch: did not receive HSTS header
 f-rickroll-g.pw: could not connect to host
 f-s-u.co.uk: could not connect to host
 f00.ca: did not receive HSTS header
 f2f.cash: could not connect to host
 faber.io: could not connect to host
 fabhub.io: could not connect to host
 fabianfischer.de: did not receive HSTS header
 fabriko.fr: did not receive HSTS header
-fabrysociety.org: did not receive HSTS header
 factorable.net: did not receive HSTS header
 factorygw.com: did not receive HSTS header
 fadilus.com: did not receive HSTS header
 faesser.com: did not receive HSTS header
 fahmed.de: did not receive HSTS header
 fail4free.de: did not receive HSTS header
 failproof.be: max-age too low: 604800
 fairkey.dk: did not receive HSTS header
@@ -3327,16 +3370,17 @@ fatlossguide.xyz: could not connect to h
 fatwin.pw: could not connect to host
 fatzebra.com.au: max-age too low: 0
 fayolle.info: did not receive HSTS header
 fbox.li: could not connect to host
 fcsic.gov: did not receive HSTS header
 fdj.im: could not connect to host
 fdt.name: did not receive HSTS header
 feard.space: could not connect to host
+featuredmen.com: did not receive HSTS header
 fedn.it: could not connect to host
 fedo.moe: could not connect to host
 feedthebot.com: did not receive HSTS header
 feedthefuture.gov: did not receive HSTS header
 feezmodo.com: did not receive HSTS header
 fefore.com: could not connect to host
 fegans.org.uk: did not receive HSTS header
 felisslovakia.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 119"  data: no]
@@ -3495,35 +3539,36 @@ franzt.de: could not connect to host
 frasesdeamizade.pt: could not connect to host
 frasesytarjetas.com: did not receive HSTS header
 frasys.io: did not receive HSTS header
 frau-inge.de: could not connect to host
 fraudempire.com: could not connect to host
 freeflow.tv: could not connect to host
 freelanced.co.za: could not connect to host
 freelo.cz: did not receive HSTS header
-freematthale.net: did not receive HSTS header
+freematthale.net: could not connect to host
 freesoftwaredriver.com: did not receive HSTS header
 freethought.org.au: could not connect to host
 freeutopia.org: did not receive HSTS header
 freqlabs.com: did not receive HSTS header
 freshfind.xyz: could not connect to host
 freshlymind.com: did not receive HSTS header
 frezbo.com: could not connect to host
 frforms.com: did not receive HSTS header
 fridaperfumaria.com.br: could not connect to host
 fridolinka.cz: could not connect to host
 friendica.ch: could not connect to host
 friendlyfiregameshow.com: could not connect to host
 frimons.com: could not connect to host
 froggstack.de: could not connect to host
-fromix.de: did not receive HSTS header
+fromix.de: could not connect to host
 fromthesoutherncross.com: could not connect to host
 frontisme.nl: did not receive HSTS header
 frontmin.com: did not receive HSTS header
+fropky.com: did not receive HSTS header
 frost-ci.xyz: could not connect to host
 froxlor.support: max-age too low: 0
 frsis2017.com: could not connect to host
 frugro.be: did not receive HSTS header
 fruitusers.com: could not connect to host
 frumious.fyi: could not connect to host
 fsapubs.gov: did not receive HSTS header
 fsinf.at: did not receive HSTS header
@@ -3542,33 +3587,34 @@ funkyweddingideas.com.au: could not conn
 funnyang.com: could not connect to host
 funrun.com: did not receive HSTS header
 fuorifuocogenova.it: could not connect to host
 furiffic.com: did not receive HSTS header
 furnation.com: could not connect to host
 furry.be: did not receive HSTS header
 fusedrops.com: could not connect to host
 fusionmate.com: could not connect to host
+fuskator.com: did not receive HSTS header
 futbol11.com: did not receive HSTS header
 futurestarsusa.org: did not receive HSTS header
 futuretechnologi.es: could not connect to host
 futureyouhealth.com: did not receive HSTS header
 fuvpn.com: could not connect to host
 fwest.ovh: did not receive HSTS header
 fwest98.ovh: did not receive HSTS header
 fws.gov: did not receive HSTS header
 fx-rk.com: did not receive HSTS header
 fysiohaenraets.nl: did not receive HSTS header
 fzn.io: could not connect to host
 fzslm.me: could not connect to host
 g-i-s.vn: did not receive HSTS header
 g-rickroll-o.pw: could not connect to host
 g2a.co: did not receive HSTS header
 g2g.com: did not receive HSTS header
-g4w.co: could not connect to host (error ignored - included regardless)
+g4w.co: did not receive HSTS header (error ignored - included regardless)
 g5led.nl: could not connect to host
 g77.ca: could not connect to host
 gabber.scot: could not connect to host
 gabi.com.es: could not connect to host
 gabi.soy: did not receive HSTS header
 gabi.uno: could not connect to host
 gablaxian.com: max-age too low: 2592000
 gaelleetarnaud.com: did not receive HSTS header
@@ -3766,16 +3812,17 @@ googleplex.com: did not receive HSTS hea
 googley.fr: max-age too low: 0
 goolok.com: could not connect to host
 gootlijsten.nl: did not receive HSTS header
 goozz.nl: did not receive HSTS header
 gopay.cz: did not receive HSTS header
 gopokego.cz: could not connect to host
 gorilla-gym.site: could not connect to host
 gorillow.com: could not connect to host
+gosharewood.com: did not receive HSTS header
 goshop.cz: did not receive HSTS header
 gostream.asia: did not receive HSTS header
 gotgenes.com: could not connect to host
 goto.google.com: did not receive HSTS header (error ignored - included regardless)
 goto.msk.ru: did not receive HSTS header
 gotocloud.ru: did not receive HSTS header
 gotowned.org: max-age too low: 0
 gotspot.com: could not connect to host
@@ -3790,17 +3837,17 @@ gpo.gov: did not receive HSTS header
 gpsfix.cz: did not receive HSTS header
 gpstuner.com: did not receive HSTS header
 graavaapi.elasticbeanstalk.com: could not connect to host
 gracesofgrief.com: could not connect to host
 grachtenpandverkopen.nl: could not connect to host
 grafitec.ru: did not receive HSTS header
 grana.com: did not receive HSTS header
 grandchamproofing.com: did not receive HSTS header
-grandlinecsk.ru: could not connect to host
+grandlinecsk.ru: did not receive HSTS header
 grandmascookieblog.com: did not receive HSTS header
 grantedby.me: max-age too low: 0
 grantmorrison.net: did not receive HSTS header
 graph.no: did not receive HSTS header
 graphsearchengine.com: could not connect to host
 gratis-app.com: did not receive HSTS header
 gratis-lovecheck.de: could not connect to host
 gravitation.pro: could not connect to host
@@ -3945,17 +3992,16 @@ handinhandfoundation.org.uk: could not c
 handiworker.com: could not connect to host
 handleidingkwijt.com: did not receive HSTS header
 handsandall.com: did not receive HSTS header
 hanfu.la: could not connect to host
 hangar18-modelismo.com.br: could not connect to host
 hanimalis.fr: could not connect to host
 hans-natur.de: did not receive HSTS header
 hao2taiwan.com: max-age too low: 0
-haogoodair.ca: did not receive HSTS header
 haomwei.com: could not connect to host
 haoyugao.com: could not connect to host
 haozi.me: could not connect to host
 happix.nl: did not receive HSTS header
 happyandrelaxeddogs.eu: did not receive HSTS header
 happycoder.net: did not receive HSTS header
 happyfabric.me: did not receive HSTS header
 happygastro.com: could not connect to host
@@ -3970,17 +4016,16 @@ harlentimberproducts.co.uk: did not rece
 harmonycosmetic.com: max-age too low: 300
 harristony.com: could not connect to host
 hartlep.eu: could not connect to host
 hartmancpa.com: did not receive HSTS header
 harvestrenewal.org: did not receive HSTS header
 harz.cloud: could not connect to host
 has.vision: could not connect to host
 hash-list.com: could not connect to host
-hashnode.com: did not receive HSTS header
 hasilocke.de: did not receive HSTS header
 hasinase.de: did not receive HSTS header
 haste.ch: could not connect to host
 hastherebeenamassshooting.today: could not connect to host
 hatoko.net: could not connect to host
 haufschild.de: could not connect to host
 haurumcraft.net: could not connect to host
 hausarzt-stader-str.de: did not receive HSTS header
@@ -4206,17 +4251,17 @@ icloud.net: could not connect to host
 icntorrent.download: could not connect to host
 icq-project.net: could not connect to host
 icreative.nl: did not receive HSTS header
 id-co.in: could not connect to host
 id-conf.com: did not receive HSTS header
 ideal-envelopes.co.uk: did not receive HSTS header
 idealmoto.com: did not receive HSTS header
 idealmykonos.com: did not receive HSTS header
-ideaman924.com: could not connect to host
+ideaman924.com: did not receive HSTS header
 ideaplus.me: could not connect to host
 ideasmeetingpoint.com: could not connect to host
 ideation-inc.co.jp: could not connect to host
 idedr.com: could not connect to host
 identitylabs.uk: could not connect to host
 identitysandbox.gov: could not connect to host
 idgsupply.com: did not receive HSTS header
 idisplay.es: did not receive HSTS header
@@ -4237,19 +4282,19 @@ ignatisd.gr: did not receive HSTS header
 igule.net: could not connect to host
 ihrlotto.de: could not connect to host
 ihrnationalrat.ch: could not connect to host
 ihsbsd.me: could not connect to host
 ihsbsd.tk: could not connect to host
 iispeed.com: did not receive HSTS header
 ijn-dd.nl: [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 119"  data: no]
 ijoda.com: did not receive HSTS header
-ikon.name: did not receive HSTS header
+ikon.name: could not connect to host
 ikwilguidobellen.nl: could not connect to host
-ilbuongiorno.it: did not receive HSTS header
+ilbuongiorno.it: could not connect to host
 ilgi.work: could not connect to host
 ilikerainbows.co: could not connect to host
 ilikerainbows.co.uk: could not connect to host
 ilikfreshweedstores.com: did not receive HSTS header
 ilmconpm.de: did not receive HSTS header
 ilona.graphics: did not receive HSTS header
 iluvscotland.co.uk: max-age too low: 7889238
 imakepoems.net: could not connect to host
@@ -4263,21 +4308,21 @@ immoverkauf24.de: did not receive HSTS h
 immunicity.cc: could not connect to host
 immunicity.date: did not receive HSTS header
 immunicity.eu: did not receive HSTS header
 immunicity.host: could not connect to host
 immunicity.info: could not connect to host
 immunicity.online: could not connect to host
 immunicity.press: could not connect to host
 immunicity.rocks: could not connect to host
-immunicity.today: did not receive HSTS header
+immunicity.today: could not connect to host
 immunicity.top: could not connect to host
 immunicity.win: could not connect to host
-immunicity.works: did not receive HSTS header
-immunicity.world: did not receive HSTS header
+immunicity.works: could not connect to host
+immunicity.world: could not connect to host
 imolug.org: did not receive HSTS header
 imoni-blog.net: could not connect to host
 imoto.me: could not connect to host
 imouto.my: max-age too low: 5184000
 imperialwebsolutions.com: did not receive HSTS header
 imu.li: did not receive HSTS header
 imusic.dk: did not receive HSTS header
 inb4.us: could not connect to host
@@ -4359,16 +4404,17 @@ interserved.com: did not receive HSTS he
 intervisteperstrada.com: could not connect to host
 intexplore.org: could not connect to host
 intim-uslugi-kazan.net: could not connect to host
 intimateperrierjouet.com: could not connect to host
 intimici.com.br: could not connect to host
 intimtoy.com.ua: could not connect to host
 intranetsec.fr: could not connect to host
 intrp.net: did not receive HSTS header
+intune.life: did not receive HSTS header
 inverselink-user-content.com: could not connect to host
 inverselink.com: could not connect to host
 investnext.com: max-age too low: 43200
 investor.gov: did not receive HSTS header
 invictusmc.uk: could not connect to host
 inviosolutions.com: max-age too low: 0
 invite24.pro: could not connect to host
 iolife.dk: could not connect to host
@@ -4421,17 +4467,16 @@ ishangirdhar.com: could not connect to h
 ishillaryclintoninprisonyet.com: could not connect to host
 isitamor.pm: could not connect to host
 iskaz.rs: did not receive HSTS header
 islandzero.net: did not receive HSTS header
 islief.com: did not receive HSTS header
 ismetroonfiretoday.com: could not connect to host
 isogen5.com: could not connect to host
 isogram.nl: could not connect to host
-isreedyintheuk.com: did not receive HSTS header
 istanbultravelguide.info: could not connect to host
 istaspirtslietas.lv: did not receive HSTS header
 it-cave.com: could not connect to host
 it-go.net: did not receive HSTS header
 it-schwerin.de: could not connect to host
 itechgeek.com: max-age too low: 0
 items.lv: did not receive HSTS header
 itemton.com: could not connect to host
@@ -4495,17 +4540,17 @@ jameshale.me: did not receive HSTS heade
 jamesmaurer.com: did not receive HSTS header
 jamourtney.com: could not connect to host
 jan-daniels.de: did not receive HSTS header
 jan-roenspies.de: could not connect to host
 jan27.org: did not receive HSTS header
 janario.me: could not connect to host
 janbrodda.de: max-age too low: 2592000
 jangho.me: could not connect to host
-janking.de: did not receive HSTS header
+janking.de: could not connect to host
 jannyrijneveld.nl: did not receive HSTS header
 janus-engineering.de: did not receive HSTS header
 japaripark.com: could not connect to host
 japlex.com: could not connect to host
 jaqen.ch: could not connect to host
 jaroslavtrsek.cz: did not receive HSTS header
 jarsater.com: could not connect to host
 jartza.org: could not connect to host
@@ -4514,17 +4559,17 @@ jasoncosper.com: did not receive HSTS he
 jasonroe.me: could not connect to host
 jasperespejo.com: did not receive HSTS header
 jastoria.pl: could not connect to host
 jav-collective.com: could not connect to host
 java-board.com: could not connect to host
 javachip.win: could not connect to host
 javan.ga: could not connect to host
 javelinsms.com: could not connect to host
-javilacat.info: could not connect to host
+javilacat.info: did not receive HSTS header
 jayblock.com: did not receive HSTS header
 jaylen.com.ar: did not receive HSTS header
 jayschulman.com: did not receive HSTS header
 jayscoaching.com: did not receive HSTS header
 jayshao.com: did not receive HSTS header
 jbelien.be: did not receive HSTS header
 jbelien.photography: did not receive HSTS header
 jbfp.dk: could not connect to host
@@ -4554,17 +4599,16 @@ jet-code.com: could not connect to host
 jetaprices.com: max-age too low: 0
 jetflex.de: did not receive HSTS header
 jetlagphotography.com: could not connect to host
 jetsetcharge.com: could not connect to host
 jetsetpay.com: could not connect to host
 jettshome.org: could not connect to host
 jewellerydesignstore.com: could not connect to host
 jfmel.com: did not receive HSTS header
-jfnllc.com: did not receive HSTS header
 jfx.space: did not receive HSTS header
 jh-media.eu: could not connect to host
 jhburton.uk: could not connect to host
 jhejderup.me: could not connect to host
 jia1hao.com: could not connect to host
 jiaidu.com: could not connect to host
 jichi.me: could not connect to host
 jief.me: did not receive HSTS header
@@ -4577,17 +4621,17 @@ jimmycai.org: could not connect to host
 jingyuesi.com: could not connect to host
 jinmaguoji.com: could not connect to host
 jinshavip.com: could not connect to host
 jirav.io: could not connect to host
 jitsi.org: did not receive HSTS header
 jiyue.com: did not receive HSTS header
 jkb.pics: could not connect to host
 jkbuster.com: could not connect to host
-jkng.eu: did not receive HSTS header
+jkng.eu: could not connect to host
 jko.works: could not connect to host
 jm06.com: did not receive HSTS header
 jm22.com: could not connect to host
 jmdekker.it: could not connect to host
 jn1.me: did not receive HSTS header
 joakimalgroy.com: could not connect to host
 jobflyapp.com: could not connect to host
 jobshq.com: did not receive HSTS header
@@ -4742,27 +4786,26 @@ kernl.us: did not receive HSTS header
 keskeces.com: did not receive HSTS header
 keymaster.lookout.com: did not receive HSTS header
 kfbrussels.be: could not connect to host
 kg-rating.com: could not connect to host
 kgxtech.com: max-age too low: 2592000
 khaganat.net: did not receive HSTS header
 ki-on.net: did not receive HSTS header
 kialo.com: did not receive HSTS header
-kibriscicek.net: did not receive HSTS header
 kickass-proxies.org: could not connect to host
 kickass.al: could not connect to host
 kickasstorrents.gq: did not receive HSTS header
 kickstart.com.pk: did not receive HSTS header
 kid-dachau.de: did not receive HSTS header
 kidkat.cn: could not connect to host
 kiel-media.de: did not receive HSTS header
 kieranjones.uk: did not receive HSTS header
 killerit.in: could not connect to host
-kimana.pe: could not connect to host
+kimana.pe: did not receive HSTS header
 kimberg.co.uk: could not connect to host
 kimpost.org: could not connect to host
 kina.guide: could not connect to host
 kinderly.co.uk: did not receive HSTS header
 kinderwagen-test24.de: could not connect to host
 kindlyfire.com: could not connect to host
 kindof.ninja: could not connect to host
 kingmanhall.org: could not connect to host
@@ -4790,32 +4833,30 @@ kitatec.com.br: could not connect to hos
 kitchenchaos.de: could not connect to host
 kitestar.co.uk: did not receive HSTS header
 kitk.at: could not connect to host
 kitsostech.com: could not connect to host
 kitsta.com: could not connect to host
 kiwiirc.com: max-age too low: 5256000
 kiyo.space: could not connect to host
 kizil.net: could not connect to host
-kj1391.com: did not receive HSTS header
-kj1397.com: did not receive HSTS header
 kjaermaxi.me: did not receive HSTS header
 kjg-bachrain.de: could not connect to host
 klas.or.id: did not receive HSTS header
 klauwd.com: could not connect to host
 klaxn.org: could not connect to host
 klean-ritekc.com: did not receive HSTS header
 kleertjesvoordelig.nl: could not connect to host
 kleinerarchitekturfuehrer.de: could not connect to host
 kleppe.co: could not connect to host
 kletterkater.com: did not receive HSTS header
 klicktojob.de: could not connect to host
 klunkergarten.org: could not connect to host
 knapen.io: max-age too low: 604800
-knccloud.com: did not receive HSTS header
+knccloud.com: could not connect to host
 kngk-transavto.ru: could not connect to host
 knigadel.com: did not receive HSTS header
 knightsbridgegroup.org: could not connect to host
 knowdebt.org: did not receive HSTS header
 knowledgesnap.com: could not connect to host
 knowledgesnapsites.com: could not connect to host
 koddsson.com: did not receive HSTS header
 kode-it.de: could not connect to host
@@ -4952,17 +4993,16 @@ laquack.com: could not connect to host
 laredsemanario.com: could not connect to host
 lasercloud.ml: could not connect to host
 laserfuchs.de: did not receive HSTS header
 lashstuff.com: did not receive HSTS header
 latelierdekathy.com: could not connect to host
 latemodern.com: could not connect to host
 latinred.com: could not connect to host
 latus.xyz: could not connect to host
-laufpix.de: max-age too low: 0
 launchkey.com: did not receive HSTS header
 laurel4th.org: did not receive HSTS header
 laureltv.org: did not receive HSTS header
 lausitzer-widerstand.de: did not receive HSTS header
 laventainnhotel-mailing.com: did not receive HSTS header
 lavine.ch: did not receive HSTS header
 lavito.cz: did not receive HSTS header
 lavoiepharmd.com: could not connect to host
@@ -5009,17 +5049,16 @@ lepont.pl: could not connect to host
 lerasenglish.com: max-age too low: 0
 lerner.moscow: did not receive HSTS header
 les-corsaires.net: could not connect to host
 les-voitures-electriques.com: did not receive HSTS header
 lesecuadors.com: did not receive HSTS header
 lesliekearney.com: did not receive HSTS header
 lesperlesdunet.fr: could not connect to host
 lesquerda.cat: did not receive HSTS header
-letitfly.me: did not receive HSTS header
 letras.mus.br: did not receive HSTS header
 letsmultiplayerplay.com: did not receive HSTS header
 letstox.com: could not connect to host
 letustravel.tk: could not connect to host
 levatc.tk: did not receive HSTS header
 level-10.net: did not receive HSTS header
 levelum.com: did not receive HSTS header
 levert.ch: could not connect to host
@@ -5100,17 +5139,16 @@ litespeed.io: could not connect to host
 little.pw: could not connect to host
 littlefreelibrary.org: did not receive HSTS header
 littleqiu.net: could not connect to host
 liujunyang.com: could not connect to host
 livecards.co.uk: did not receive HSTS header
 livedemo.io: could not connect to host
 livej.am: could not connect to host
 liverewrite.com: could not connect to host
-livi.co: could not connect to host
 liviababynet.com.br: could not connect to host
 lixiang.one: could not connect to host
 lixingcong.com: could not connect to host
 lkp111138.me: could not connect to host
 llamasweet.tech: could not connect to host
 loacg.com: did not receive HSTS header
 loadingdeck.com: did not receive HSTS header
 loadso.me: could not connect to host
@@ -5181,16 +5219,17 @@ lpgram.ga: could not connect to host
 lrhsclubs.com: could not connect to host
 lrhstsa.com: could not connect to host
 ls-a.org: did not receive HSTS header
 lsky.cn: could not connect to host
 lsp-sports.de: did not receive HSTS header
 ltbytes.com: could not connect to host
 ltechnologygroup.com: did not receive HSTS header
 ltu.social: could not connect to host
+lubomirkazakov.com: did not receive HSTS header
 lucas-garte.com: did not receive HSTS header
 lucaterzini.com: could not connect to host
 luclu7.pw: did not receive HSTS header
 ludwig.click: did not receive HSTS header
 ludwiggrill.de: did not receive HSTS header
 lufthansaexperts.com: max-age too low: 2592000
 luis-checa.com: could not connect to host
 lukeng.me: could not connect to host
@@ -5379,16 +5418,17 @@ matlabjo.ir: did not receive HSTS header
 matomeplus.co: could not connect to host
 matrict.com: could not connect to host
 matrip.de: could not connect to host
 matrix.ac: could not connect to host
 matrixcheats.net: could not connect to host
 matsuz.com: could not connect to host
 matt.tf: did not receive HSTS header
 mattandreko.com: did not receive HSTS header
+mattberryman.com: max-age too low: 43200
 matterconcern.com: could not connect to host
 mattfin.ch: could not connect to host
 matthewprenger.com: could not connect to host
 matthiassteen.be: max-age too low: 0
 mattressinsider.com: max-age too low: 3153600
 mattsvensson.com: max-age too low: 0
 matty.digital: did not receive HSTS header
 maultrom.ml: could not connect to host
@@ -5399,32 +5439,32 @@ mausi.co: did not receive HSTS header
 mavisang.cf: could not connect to host
 mawe.red: could not connect to host
 maximov.space: could not connect to host
 maxr1998.de: did not receive HSTS header
 maxserver.com: did not receive HSTS header
 maya.mg: could not connect to host
 mazyun.com: max-age too low: 3600
 mazz-tech.com: could not connect to host
+mazzotta.me: did not receive HSTS header
 mbconsultancy.nu: did not receive HSTS header
 mc81.com: could not connect to host
 mca2017.org: did not receive HSTS header
 mcard.vn: did not receive HSTS header
 mcc.re: could not connect to host
 mccarty.io: could not connect to host
 mcdonalds.ru: did not receive HSTS header
 mcga.media: could not connect to host
 mclab.su: could not connect to host
 mclist.it: could not connect to host
 mclyr.com: max-age too low: 7776000
 mcmillansedationdentistry.com: did not receive HSTS header
 mcooperlaw.com: did not receive HSTS header
 mcuexchange.com: did not receive HSTS header
 mdfnet.se: did not receive HSTS header
-mdkr.nl: did not receive HSTS header
 mdscomp.net: did not receive HSTS header
 meadowfen.farm: could not connect to host
 meadowfenfarm.com: could not connect to host
 mealz.com: did not receive HSTS header
 meamod.com: max-age too low: 0
 meat-education.com: could not connect to host
 mebio.us: did not receive HSTS header
 mecenat-cassous.com: did not receive HSTS header
@@ -5451,17 +5491,16 @@ meghudson.com: could not connect to host
 meifrench.com: could not connect to host
 meillard-auto-ecole.ch: could not connect to host
 mein-gesundheitsmanager.com: max-age too low: 0
 meincloudspeicher.de: could not connect to host
 meinebo.it: could not connect to host
 mekatrotekno.com: did not receive HSTS header
 melangebrasil.com: could not connect to host
 melcher.it: did not receive HSTS header
-meledia.com: could not connect to host
 melhoresdominios.net: could not connect to host
 melted.pw: could not connect to host
 memberpress.com: did not receive HSTS header
 members.mayfirst.org: did not receive HSTS header
 memeblast.ninja: could not connect to host
 memory-plus-180.com: could not connect to host
 memorytrace.space: could not connect to host
 menkyo-blog.com: did not receive HSTS header
@@ -5506,17 +5545,17 @@ mhict.nl: could not connect to host
 mht-travel.com: could not connect to host
 mhx.pw: could not connect to host
 mi80.com: could not connect to host
 mia.to: could not connect to host
 mianfei-vpn.com: did not receive HSTS header
 michaeldemuth.com: could not connect to host
 michaelfitzpatrickruth.com: could not connect to host
 michaelmorpurgo.com: did not receive HSTS header
-michaeln.net: did not receive HSTS header
+michaeln.net: could not connect to host
 michaelscrivo.com: did not receive HSTS header
 michaelwaite.org: could not connect to host
 michal-kral.cz: could not connect to host
 michalborka.cz: could not connect to host
 miconware.de: could not connect to host
 micro-dv.ru: could not connect to host
 micro-rain-systems.com: did not receive HSTS header
 microme.ga: could not connect to host
@@ -5533,17 +5572,16 @@ mightydicks.tech: could not connect to h
 mightysounds.cz: max-age too low: 0
 migrator.co: could not connect to host
 miguksaram.com: could not connect to host
 mijcorijneveld.nl: did not receive HSTS header
 mijn-email.org: could not connect to host
 mijnetickets.nl: did not receive HSTS header
 mijnkredietpaspoort.nl: could not connect to host
 mijnsite.ovh: did not receive HSTS header
-mijnstembureau.nl: did not receive HSTS header
 mikadesign.se: did not receive HSTS header
 mikaelemilsson.net: did not receive HSTS header
 mikeburns.com: could not connect to host
 mikeg.de: did not receive HSTS header
 mikeology.org: could not connect to host
 mikepair.net: could not connect to host
 mikeybot.com: could not connect to host
 mikii.club: could not connect to host
@@ -5592,16 +5630,17 @@ missrain.tw: could not connect to host
 mist.ink: could not connect to host
 mister.hosting: could not connect to host
 misterl.net: did not receive HSTS header
 mitarbeiter-pc.de: did not receive HSTS header
 mitchellrenouf.ca: could not connect to host
 mitm-software.badssl.com: could not connect to host
 mittenhacks.com: could not connect to host
 mivcon.net: could not connect to host
+miweb.cr: did not receive HSTS header
 mizd.at: could not connect to host
 mizi.name: could not connect to host
 mjcaffarattilaw.com: did not receive HSTS header
 mk-dizajn.com: did not receive HSTS header
 mkasu.org: did not receive HSTS header
 mkfs.be: could not connect to host
 mkw.st: could not connect to host
 mlcdn.co: could not connect to host
@@ -5840,17 +5879,17 @@ nansay.cn: could not connect to host
 nanto.eu: could not connect to host
 narodniki.com: did not receive HSTS header
 narviz.com: did not receive HSTS header
 nashira.cz: did not receive HSTS header
 nasralmabrooka.com: did not receive HSTS header
 natalia-fadeeva.ru: could not connect to host
 natalia.io: could not connect to host
 natalieandjoshua.com: could not connect to host
-natalt.org: did not receive HSTS header
+natalt.org: could not connect to host
 nathanmfarrugia.com: did not receive HSTS header
 nationwidevehiclecontracts.co.uk: did not receive HSTS header
 natural-progesterone.net: could not connect to host
 naturecoaster.com: did not receive HSTS header
 natuurbehangnederland.nl: could not connect to host
 naudles.me: could not connect to host
 nav.jobs: could not connect to host
 naval.tf: could not connect to host
@@ -5933,16 +5972,17 @@ ng-security.com: could not connect to ho
 ngine.ch: did not receive HSTS header
 nginxnudes.com: could not connect to host
 nglr.org: could not connect to host
 ngt-service.ru: did not receive HSTS header
 niagarafalls.ca: did not receive HSTS header
 nibiisclaim.com: could not connect to host
 nicestresser.fr: could not connect to host
 nicky.io: did not receive HSTS header
+nico.one: did not receive HSTS header
 nicoborghuis.nl: could not connect to host
 nicolasbettag.me: did not receive HSTS header
 niconiconi.xyz: could not connect to host
 niconode.com: could not connect to host
 nidux.com: did not receive HSTS header
 niduxcomercial.com: could not connect to host
 nien.chat: could not connect to host
 nifpnet.nl: did not receive HSTS header
@@ -5980,17 +6020,16 @@ nodi.at: did not receive HSTS header
 noexpect.org: could not connect to host
 noima.com: did not receive HSTS header
 noisebridge.social: could not connect to host
 nolberg.net: did not receive HSTS header
 nolimitsbook.de: did not receive HSTS header
 nolte.work: could not connect to host
 nomorebytes.de: could not connect to host
 noodlesandwich.com: did not receive HSTS header
-nootropicsource.com: did not receive HSTS header
 nope.website: could not connect to host
 nopex.no: could not connect to host
 nopol.de: could not connect to host
 norandom.com: could not connect to host
 norb.at: could not connect to host
 nordlicht.photography: did not receive HSTS header
 norge.guide: could not connect to host
 northcutt.com: did not receive HSTS header
@@ -6086,17 +6125,17 @@ ocrami.us: did not receive HSTS header
 octocat.ninja: could not connect to host
 oddmouse.com: could not connect to host
 odin.xxx: could not connect to host
 odinoffice.no: did not receive HSTS header
 odysseyandco.com: could not connect to host
 oe8.bet: could not connect to host
 oestepaulista.net: did not receive HSTS header
 ofcourselanguages.com: could not connect to host
-offenedialoge.de: max-age too low: 2592000
+offenedialoge.de: could not connect to host
 officeclub.com.mx: did not receive HSTS header
 offshore-firma.org: could not connect to host
 offshore-unternehmen.com: could not connect to host
 offshorefirma-gruenden.com: could not connect to host
 offshoremarineparts.com: did not receive HSTS header
 oficinadocelular.com.br: could not connect to host
 oganek.ie: could not connect to host
 oganime.com: could not connect to host
@@ -6151,17 +6190,17 @@ online-casino.eu: did not receive HSTS h
 online-wetten.de: did not receive HSTS header
 onlinebiller.com: did not receive HSTS header
 onlinecompliance.org: did not receive HSTS header
 onlinedemo.hu: could not connect to host
 onlinedeposit.us: could not connect to host
 onlinekasino.de: did not receive HSTS header
 onlinepollsph.com: could not connect to host
 onlineschadestaat.nl: did not receive HSTS header
-onlinespielothek.com: could not connect to host
+onlinespielothek.com: did not receive HSTS header
 onlinewetten.de: could not connect to host
 only-roses.co.uk: did not receive HSTS header
 only-roses.com: did not receive HSTS header
 onlyshopstation.com: did not receive HSTS header
 onlyzero.net: could not connect to host
 onmuvo.com: did not receive HSTS header
 onovlena.dn.ua: could not connect to host
 onpatient.com: did not receive HSTS header
@@ -6562,17 +6601,16 @@ poris.web.id: could not connect to host
 porno-gif.ru: did not receive HSTS header
 pornstars.me: did not receive HSTS header
 portalm.tk: could not connect to host
 portalplatform.net: could not connect to host
 portaluniversalista.org: did not receive HSTS header
 poshpak.com: max-age too low: 86400
 postback.io: could not connect to host
 postcodewise.co.uk: could not connect to host
-posterspy.com: did not receive HSTS header
 postscheduler.org: could not connect to host
 posylka.de: did not receive HSTS header
 potatoheads.net: could not connect to host
 potbar.com: could not connect to host
 potlytics.com: could not connect to host
 potsky.com: did not receive HSTS header
 pourmesloisirs.com: did not receive HSTS header
 poussinooz.fr: could not connect to host
@@ -6597,16 +6635,17 @@ praxis-research.info: could not connect 
 precisionaeroimaging.com: did not receive HSTS header
 prediksisydney.com: could not connect to host
 preezzie.com: could not connect to host
 prefis.com: did not receive HSTS header
 prefontaine.name: could not connect to host
 prego-shop.de: did not receive HSTS header
 preissler.co.uk: could not connect to host
 prelist.org: did not receive HSTS header
+prelogica.com.br: did not receive HSTS header
 prepaid-voip.nl: did not receive HSTS header
 prepandgo-euro.com: could not connect to host
 presidentials2016.com: could not connect to host
 press-anime-nenkan.com: did not receive HSTS header
 press-presse.ca: did not receive HSTS header
 pressenews.net: did not receive HSTS header
 pressfreedomfoundation.org: did not receive HSTS header
 prettygrouse.com: did not receive HSTS header
@@ -6648,17 +6687,16 @@ projectdp.net: could not connect to host
 projectherogames.xyz: did not receive HSTS header
 projectmercury.space: could not connect to host
 projetoresecia.com: could not connect to host
 promecon-gmbh.de: did not receive HSTS header
 prontocleaners.co.uk: could not connect to host
 prontolight.com: did not receive HSTS header
 prontomovers.co.uk: could not connect to host
 propactrading.com: could not connect to host
-prosocialmachines.com: could not connect to host
 prosoft.sk: did not receive HSTS header
 prosperident.com: did not receive HSTS header
 protoyou.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 119"  data: no]
 providerlijst.com: did not receive HSTS header
 providerlijst.nl: did not receive HSTS header
 prowhisky.de: did not receive HSTS header
 proximato.com: could not connect to host
 proxybay.al: could not connect to host
@@ -6891,16 +6929,17 @@ renrenss.com: could not connect to host
 rentacarcluj.xyz: did not receive HSTS header
 rentbrowsertrain.me: could not connect to host
 rentcarassist.com: could not connect to host
 renteater.com: could not connect to host
 rentex.com: did not receive HSTS header
 renyiyou.com: could not connect to host
 replacemychina.com: could not connect to host
 report-to.com: did not receive HSTS header
+report-uri.io: did not receive HSTS header
 reprolife.co.uk: could not connect to host
 res-rheingau.de: did not receive HSTS header
 res42.com: could not connect to host
 reserve-online.net: did not receive HSTS header
 residentsinsurance.co.uk: did not receive HSTS header
 resl20.servehttp.com: could not connect to host
 respice.xyz: could not connect to host
 respostas.com.br: did not receive HSTS header
@@ -7007,17 +7046,16 @@ rough.nu: could not connect to host
 roundtheme.com: did not receive HSTS header
 rous.se: could not connect to host
 rouvray.org: could not connect to host
 royal-forest.org: max-age too low: 0
 royalhop.co: could not connect to host
 royalpub.net: did not receive HSTS header
 royalsignaturecruise.com: could not connect to host
 roychan.org: max-age too low: 0
-rozalynne-dawn.ga: did not receive HSTS header
 rozeapp.nl: could not connect to host
 rr.in.th: could not connect to host
 rrke.cc: did not receive HSTS header
 rsajeey.info: could not connect to host
 rsampaio.info: did not receive HSTS header
 rsblake.net: could not connect to host
 rsf.io: could not connect to host
 rsmaps.org: could not connect to host
@@ -7065,17 +7103,16 @@ safematix.com: could not connect to host
 safemovescheme.co.uk: could not connect to host
 safersurfing.eu: did not receive HSTS header
 safewings-nh.nl: could not connect to host
 sagarhandicraft.com: could not connect to host
 sageth.com: max-age too low: 0
 sah3.net: could not connect to host
 saharalondon.com: max-age too low: 0
 saharmassachi.com: could not connect to host
-saifoundation.in: did not receive HSTS header
 sail-nyc.com: did not receive HSTS header
 saint-astier-triathlon.com: did not receive HSTS header
 saintjohnlutheran.church: did not receive HSTS header
 sairai.bid: did not receive HSTS header
 sakaki.anime.my: max-age too low: 5184000
 sakaserver.com: did not receive HSTS header
 sakib.ninja: did not receive HSTS header
 sakurabuff.com: could not connect to host
@@ -7174,33 +7211,33 @@ scrambler.in: could not connect to host
 scrapings.net: could not connect to host
 screencaster.io: did not receive HSTS header
 screenresolution.space: could not connect to host
 screensaversplanet.com: did not receive HSTS header
 scribbleserver.com: could not connect to host
 scribe.systems: could not connect to host
 scrion.com: could not connect to host
 script.google.com: did not receive HSTS header (error ignored - included regardless)
-scriptenforcer.net: did not receive HSTS header
+scriptenforcer.net: could not connect to host
 scriptict.nl: could not connect to host
 scrollstory.com: did not receive HSTS header
 sdhmanagementgroup.com: could not connect to host
 sdia.ru: could not connect to host
 sdmoscow.ru: could not connect to host
 sdrobs.com: did not receive HSTS header
 sdsl-speedtest.de: could not connect to host
 seans.cc: did not receive HSTS header
 search-one.de: did not receive HSTS header
 seavancouver.com: could not connect to host
 sebastian-bair.de: could not connect to host
 sebastianhampl.de: could not connect to host
 sebastiensenechal.com: did not receive HSTS header
 sebster.com: did not receive HSTS header
 secandtech.com: could not connect to host
-seccom.ch: did not receive HSTS header
+seccom.ch: could not connect to host
 secnet.ga: could not connect to host
 secondary-survivor.com: could not connect to host
 secondary-survivor.help: could not connect to host
 secondary-survivor.net: could not connect to host
 secondarysurvivor.help: could not connect to host
 secondarysurvivorportal.com: could not connect to host
 secondarysurvivorportal.help: could not connect to host
 secondbyte.nl: could not connect to host
@@ -7365,45 +7402,45 @@ shv25.se: could not connect to host
 shwongacc.com: could not connect to host
 shypp.it: could not connect to host
 shyrydan.es: could not connect to host
 siammedia.co: could not connect to host
 sianimacion.com: could not connect to host
 sichere-kartenakzeptanz.de: could not connect to host
 siciliadigitale.pro: could not connect to host
 siddhant.me: max-age too low: 0
+sidpod.ru: did not receive HSTS header
 siebens.net: could not connect to host
 sifls.com: could not connect to host
 sifreuret.com: could not connect to host
 signoracle.com: could not connect to host
 sijimi.cn: could not connect to host
 sikayetvar.com: did not receive HSTS header
 silent.live: could not connect to host
 silentcircle.com: did not receive HSTS header
 silentcircle.org: could not connect to host
 silentlink.io: could not connect to host
 silentundo.org: did not receive HSTS header
 silicagelpackets.ca: did not receive HSTS header
 silver-drachenkrieger.de: did not receive HSTS header
 silverhome.ninja: could not connect to host
 silverpvp.com: could not connect to host
 simbast.com: could not connect to host
-simbeton.nl: did not receive HSTS header
 simbihaiti.com: did not receive HSTS header
 simccorp.com: did not receive HSTS header
 simeon.us: max-age too low: 2592000
 simfri.com: did not receive HSTS header
 simnovo.net: did not receive HSTS header
 simobilklub.si: could not connect to host
 simod.org: could not connect to host
 simon-pokorny.com: did not receive HSTS header
 simon.butcher.name: max-age too low: 2629743
 simongong.net: did not receive HSTS header
 simonsaxon.com: did not receive HSTS header
-simpan.id: did not receive HSTS header
+simpan.id: could not connect to host
 simpleai.net: max-age too low: 600
 simplelearner.com: could not connect to host
 simplepractice.com: did not receive HSTS header
 simplixos.org: could not connect to host
 simplyenak.com: did not receive HSTS header
 sin30.net: could not connect to host
 sincai666.com: could not connect to host
 sincron.org: could not connect to host
@@ -7584,17 +7621,17 @@ spiegels.nl: could not connect to host
 spielcasinos.com: did not receive HSTS header
 spikeykc.me: did not receive HSTS header
 spillmaker.no: did not receive HSTS header
 spilsbury.io: could not connect to host
 spirit-dev.net: max-age too low: 0
 spisoggrin.dk: did not receive HSTS header
 spitefultowel.com: did not receive HSTS header
 spititout.it: could not connect to host
-spittersberger.recipes: did not receive HSTS header
+spittersberger.recipes: could not connect to host
 spokonline.com: could not connect to host
 sponsortobias.com: could not connect to host
 sportchirp-internal.azurewebsites.net: did not receive HSTS header
 sporthit.ru: did not receive HSTS header
 sportifik.com: did not receive HSTS header
 sportingoods.com.br: could not connect to host
 sportscollection.com.br: could not connect to host
 sportwette.eu: did not receive HSTS header
@@ -7607,16 +7644,17 @@ spresso.me: did not receive HSTS header
 sprk.fitness: did not receive HSTS header
 sproutconnections.com: could not connect to host
 sprutech.de: did not receive HSTS header
 spyroszarzonis.com: did not receive HSTS header
 square.gs: could not connect to host
 squatldf.org: did not receive HSTS header
 srcc.fr: could not connect to host
 srevilak.net: did not receive HSTS header
+sritest.io: did not receive HSTS header
 srmaximo.com: could not connect to host
 srna.sk: could not connect to host
 srpdb.com: did not receive HSTS header
 srrr.ca: could not connect to host
 ss-free.net: could not connect to host
 ss.wtf: could not connect to host
 ssdax.com: did not receive HSTS header
 ssl.panoramio.com: did not receive HSTS header
@@ -7664,16 +7702,17 @@ stefanweiser.de: did not receive HSTS he
 stepbystep3d.com: did not receive HSTS header
 stephanierxo.com: did not receive HSTS header
 stephanos.me: could not connect to host
 stephenandburns.com: did not receive HSTS header
 stevechekblain.win: could not connect to host
 stevensononthe.net: did not receive HSTS header
 stevenz.science: could not connect to host
 stewartremodelingadvantage.com: could not connect to host
+steyaert.be: did not receive HSTS header
 stforex.com: did not receive HSTS header
 sticklerjs.org: could not connect to host
 stigroom.com: could not connect to host
 stillblackhat.id: could not connect to host
 stinkytrashhound.com: could not connect to host
 stirlingpoon.net: could not connect to host
 stirlingpoon.xyz: could not connect to host
 stitthappens.com: could not connect to host
@@ -7684,33 +7723,33 @@ stn.me.uk: did not receive HSTS header
 stockseyeserum.com: could not connect to host
 stocktrade.de: could not connect to host
 stoffe-monster.de: did not receive HSTS header
 stoick.me: could not connect to host
 stole-my.bike: could not connect to host
 stole-my.tv: could not connect to host
 stolkschepen.nl: did not receive HSTS header
 stonecutterscommunity.com: could not connect to host
-stopbreakupnow.org: did not receive HSTS header
 stopwoodfin.org: could not connect to host
 storbritannien.guide: could not connect to host
 storecove.com: did not receive HSTS header
 storeden.com: did not receive HSTS header
 storefrontify.com: did not receive HSTS header
 storiesofhealth.org: could not connect to host
 storillo.com: did not receive HSTS header
 stormhub.org: could not connect to host
 stqry.com: did not receive HSTS header
 str0.at: did not receive HSTS header
 strasweb.fr: could not connect to host
 strbt.de: could not connect to host
 strchr.com: did not receive HSTS header
 stream.pub: could not connect to host
 streamingeverywhere.com: could not connect to host
 streamingmagazin.de: could not connect to host
+streampanel.net: did not receive HSTS header
 strictlysudo.com: could not connect to host
 strife.tk: could not connect to host
 strila.me: could not connect to host
 strivephysmed.com: did not receive HSTS header
 stroeercrm.de: could not connect to host
 strongest-privacy.com: could not connect to host
 stuartbaxter.co: could not connect to host
 student-scientist.org: did not receive HSTS header
@@ -7998,17 +8037,17 @@ thecharlestonwaldorf.com: did not receiv
 thechunk.net: could not connect to host
 theclementinebutchers.com: could not connect to host
 theclubjersey.com: did not receive HSTS header
 thecoffeehouse.xyz: could not connect to host
 thecrochetcottage.net: could not connect to host
 thedrop.pw: did not receive HSTS header
 thedystance.com: could not connect to host
 theelitebuzz.com: did not receive HSTS header
-theendofzion.com: did not receive HSTS header
+theendofzion.com: could not connect to host
 theescapistswiki.com: could not connect to host
 theeyeopener.com: did not receive HSTS header
 thefarbeyond.com: could not connect to host
 theflowerbasketonline.com: could not connect to host
 thefootballanalyst.com: did not receive HSTS header
 thefreebirds.in: could not connect to host
 thefrozenfire.com: did not receive HSTS header
 thefutureharrills.com: could not connect to host
@@ -8101,17 +8140,16 @@ tictactux.de: could not connect to host
 tidmore.us: could not connect to host
 tiendschuurstraat.nl: could not connect to host
 tiensnet.com: could not connect to host
 tierrarp.com: could not connect to host
 tightlineproductions.com: did not receive HSTS header
 tikutiku.pl: could not connect to host
 tildebot.com: could not connect to host
 tiliaze.be: could not connect to host
-tiliaze.biz: could not connect to host
 tiliaze.eu: did not receive HSTS header
 tilient.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 119"  data: no]
 tilikum.io: did not receive HSTS header
 tilkah.com.au: did not receive HSTS header
 tillcraft.com: could not connect to host
 timbeilby.com: could not connect to host
 timbuktutimber.com: did not receive HSTS header
 timcamara.com: could not connect to host
@@ -8125,18 +8163,16 @@ timeserver3.de: could not connect to hos
 timestamp.io: did not receive HSTS header
 timhjalpen.se: could not connect to host
 timnash.co.uk: did not receive HSTS header
 timotrans.de: did not receive HSTS header
 timotrans.eu: did not receive HSTS header
 timowi.de: could not connect to host
 timowi.net: could not connect to host
 timschubert.net: max-age too low: 172800
-timtj.ca: did not receive HSTS header
-timweb.ca: did not receive HSTS header
 timwittenberg.com: could not connect to host
 tinchbear.xyz: could not connect to host
 tindewen.net: could not connect to host
 tipsyk.ru: could not connect to host
 tiredofeating.com: could not connect to host
 tiremoni.ch: did not receive HSTS header
 tirex.media: did not receive HSTS header
 titanlab.de: could not connect to host
@@ -8223,23 +8259,23 @@ totalworkout.fitness: did not receive HS
 totem-eshop.cz: could not connect to host
 toucedo.de: could not connect to host
 touchbasemail.com: did not receive HSTS header
 touchpointidg.us: could not connect to host
 touchscreen-handy.de: did not receive HSTS header
 touchstonefms.co.uk: did not receive HSTS header
 touchtable.nl: did not receive HSTS header
 tourpeer.com: did not receive HSTS header
-townofbridgewater.ca: did not receive HSTS header
 toxme.se: could not connect to host
 toyotamotala.se: could not connect to host
 tpbcdn.com: could not connect to host
 tpe-edu.com: could not connect to host
 tpms4u.at: did not receive HSTS header
 tracker-gps.ch: could not connect to host
+trackmeet.io: did not receive HSTS header
 tracktivity.com.au: did not receive HSTS header
 trade-smart.ru: could not connect to host
 tradingcentre.com.au: did not receive HSTS header
 tradinghope.com: could not connect to host
 traditional-knowledge.tk: did not receive HSTS header
 trafficquality.org: could not connect to host
 traindb.nl: did not receive HSTS header
 training4girls.ru: could not connect to host
@@ -8394,29 +8430,29 @@ ultimate-garcinia-plus.com: could not co
 ultimate-glow-skin.com: could not connect to host
 ultimate-memoryplus.com: could not connect to host
 ultimate-neuroplus.com: could not connect to host
 ultros.io: did not receive HSTS header
 umaimise.info: did not receive HSTS header
 umgardi.ca: could not connect to host
 umidev.com: did not receive HSTS header
 umie.cc: did not receive HSTS header
-umwandeln-online.de: did not receive HSTS header
+umwandeln-online.de: could not connect to host
 unart.info: could not connect to host
 unbanthe.net: could not connect to host
 unblockat.tk: could not connect to host
 unblocked-networks.org: could not connect to host
 unblocked.date: could not connect to host
 unblocked.faith: could not connect to host
 unblocked.host: could not connect to host
 unblocked.party: could not connect to host
-unblocked.today: did not receive HSTS header
+unblocked.today: could not connect to host
 unblocked.win: did not receive HSTS header
-unblocked.works: did not receive HSTS header
-unblocked.world: did not receive HSTS header
+unblocked.works: could not connect to host
+unblocked.world: could not connect to host
 unblockedall.site: could not connect to host
 unblockerproxy.site: could not connect to host
 unblockerproxy.top: could not connect to host
 unblockmy.party: could not connect to host
 unblockmy.tech: did not receive HSTS header
 unblockmy.xyz: did not receive HSTS header
 unblockmyproxy.site: could not connect to host
 unblockthe.site: did not receive HSTS header
@@ -8460,17 +8496,16 @@ upldr.pw: could not connect to host
 uporoops.com: could not connect to host
 uprotect.it: could not connect to host
 upstats.eu: could not connect to host
 uptic.net: did not receive HSTS header
 ur-lauber.de: did not receive HSTS header
 urandom.eu.org: did not receive HSTS header
 urban-garden.lt: could not connect to host
 urban-garden.lv: could not connect to host
-urbanstylestaging.com: did not receive HSTS header
 urbpic.com: could not connect to host
 urlchomp.com: did not receive HSTS header
 urphp.com: could not connect to host
 us-immigration.com: did not receive HSTS header
 usaab.org: did not receive HSTS header
 usafuelservice.com: did not receive HSTS header
 usbirthcertificate.com: did not receive HSTS header
 usbtypeccompliant.com: could not connect to host
@@ -8556,16 +8591,17 @@ veggiefasting.com: could not connect to 
 veggiesbourg.fr: did not receive HSTS header
 vegis.ro: did not receive HSTS header
 vehent.org: did not receive HSTS header
 vehicleuplift.co.uk: did not receive HSTS header
 vemokin.net: could not connect to host
 venicecomputerrepair.com: did not receive HSTS header
 venixplays-stream.ml: could not connect to host
 vennet.fr: did not receive HSTS header
+venoom.eu: did not receive HSTS header
 venturepro.com: did not receive HSTS header
 ventzke.com: did not receive HSTS header
 venzocrm.com: did not receive HSTS header
 vergeaccessories.com: did not receive HSTS header
 verifikatorindonesia.com: could not connect to host
 veristor.com: did not receive HSTS header
 vermontcareergateway.org: could not connect to host
 veryhax.de: could not connect to host
@@ -8724,17 +8760,16 @@ warped.com: did not receive HSTS header
 warrencreative.com: did not receive HSTS header
 warsentech.com: could not connect to host
 warsh.moe: did not receive HSTS header
 watchium.com: did not receive HSTS header
 waterforlife.net.au: did not receive HSTS header
 waterpoint.com.br: could not connect to host
 watersportmarkt.net: did not receive HSTS header
 watsonhall.uk: could not connect to host
-wattechweb.com: did not receive HSTS header
 wave.is: could not connect to host
 wavefloatrooms.com: did not receive HSTS header
 wavefrontsystemstech.com: could not connect to host
 we-bb.com: could not connect to host
 wear2work.nl: did not receive HSTS header
 wearesouthafricans.com: did not receive HSTS header
 weaverhairextensions.nl: could not connect to host
 web-industry.fr: could not connect to host
@@ -8810,17 +8845,17 @@ wettbuero.de: did not receive HSTS heade
 wetten.eu: did not receive HSTS header
 wettertoertchen.com: could not connect to host
 wetttipps.com: could not connect to host
 wetttipps.de: could not connect to host
 wevahoo.com: could not connect to host
 wevolver.com: did not receive HSTS header
 wewillgo.com: did not receive HSTS header
 wewillgo.org: did not receive HSTS header
-wewlad.me: could not connect to host
+wewlad.me: did not receive HSTS header
 wftda.com: did not receive HSTS header
 wg3k.us: did not receive HSTS header
 whatnext.limited: did not receive HSTS header
 whats.io: could not connect to host
 whatsstalk.me: could not connect to host
 whatsyouroffer.co.uk: did not receive HSTS header
 wheresben.today: could not connect to host
 whisker.network: could not connect to host
@@ -8928,17 +8963,16 @@ writeapp.me: did not receive HSTS header
 wrldevelopment.com: did not receive HSTS header
 wrwg.ca: could not connect to host
 wscbiolo.id: could not connect to host
 wsscompany.com.ve: could not connect to host
 wsup.social: could not connect to host
 wubocong.com: could not connect to host
 wubthecaptain.eu: could not connect to host
 wuetix.de: max-age too low: 0
-wufu.org: did not receive HSTS header
 wuhengmin.com: could not connect to host
 wundtherapie-schulung.de: could not connect to host
 wurzelzwerg.net: could not connect to host
 wusx.club: could not connect to host
 wvr-law.de: did not receive HSTS header
 ww2onlineshop.com: did not receive HSTS header
 www-001133.com: could not connect to host
 www-0385.com: could not connect to host
@@ -8969,16 +9003,17 @@ www.jitsi.org: did not receive HSTS head
 www.ledgerscope.net: could not connect to host
 www.logentries.com: did not receive HSTS header
 www.moneybookers.com: did not receive HSTS header
 www.neonisi.com: could not connect to host
 www.paycheckrecords.com: did not receive HSTS header
 www.rme.li: did not receive HSTS header
 www.sandbox.mydigipass.com: could not connect to host
 www.surfeasy.com: did not receive HSTS header
+www.tumblr.com: max-age too low: 300
 www.viasinc.com: did not receive HSTS header
 www.zenpayroll.com: did not receive HSTS header
 www3.info: did not receive HSTS header
 wxukang.cn: could not connect to host
 wybmabiity.com: could not connect to host
 wygluszanie.eu: did not receive HSTS header
 wyzphoto.nl: did not receive HSTS header
 x-power-detox.com: could not connect to host
@@ -9172,16 +9207,17 @@ zaoshanghao-dajia.rhcloud.com: could not
 zap.yt: did not receive HSTS header
 zarmarket.org: did not receive HSTS header
 zarooba.com: could not connect to host
 zavca.com: did not receive HSTS header
 zbigniewgalucki.eu: did not receive HSTS header
 zcon.nl: could not connect to host
 zdravotnickasluzba.eu: could not connect to host
 zdrowiepaleo.pl: did not receive HSTS header
+zdx.ch: did not receive HSTS header
 zebrababy.cn: could not connect to host
 zebry.nl: could not connect to host
 zecrypto.com: could not connect to host
 zeedroom.be: did not receive HSTS header
 zefiris.org: did not receive HSTS header
 zefu.ca: could not connect to host
 zehntner.ch: could not connect to host
 zelfmoord.ga: could not connect to host
@@ -9190,17 +9226,17 @@ zenhaiku.com: did not receive HSTS heade
 zenpayroll.com: did not receive HSTS header
 zentience.dk: did not receive HSTS header
 zentience.net: did not receive HSTS header
 zentience.org: did not receive HSTS header
 zentraler-kreditausschuss.de: did not receive HSTS header
 zentralwolke.de: did not receive HSTS header
 zenwears.com: did not receive HSTS header
 zera.com.au: could not connect to host
-zerekin.net: did not receive HSTS header
+zerekin.net: could not connect to host
 zeroday.sk: did not receive HSTS header
 zerofox.gq: could not connect to host
 zeroml.ml: could not connect to host
 zerudi.com: did not receive HSTS header
 zeto365.pl: did not receive HSTS header
 zett4.me: could not connect to host
 zeytin.pro: could not connect to host
 zh1.li: could not connect to host
@@ -9211,17 +9247,17 @@ zhaojin97.cn: could not connect to host
 zhendingresources.com: did not receive HSTS header
 zhh.in: could not connect to host
 zhihua-lai.com: did not receive HSTS header
 zhuji.com.cn: could not connect to host
 zi0r.com: did not receive HSTS header
 zian.online: could not connect to host
 zicklam.com: could not connect to host
 zigcore.com.br: could not connect to host
-zihao.me: did not receive HSTS header
+zihao.me: could not connect to host
 zinc-x.com: did not receive HSTS header
 zinenapse.info: could not connect to host
 zippy-download.com: could not connect to host
 zippy-download.de: could not connect to host
 zirtue.io: did not receive HSTS header
 zixo.sk: could not connect to host
 ziyuanabc.xyz: could not connect to host
 zizoo.com: did not receive HSTS header
@@ -9249,15 +9285,16 @@ zorasvobodova.cz: did not receive HSTS h
 zortium.report: could not connect to host
 zoznamrealit.sk: did not receive HSTS header
 zqhong.com: could not connect to host
 zqjs.tk: could not connect to host
 ztan.tk: could not connect to host
 ztcaoll222.cn: did not receive HSTS header
 zubel.it: did not receive HSTS header
 zuram.net: could not connect to host
+zurret.de: did not receive HSTS header
 zvncloud.com: did not receive HSTS header
 zwollemagazine.nl: did not receive HSTS header
 zyf.pw: could not connect to host
 zymbit.com: did not receive HSTS header
 zync.ca: did not receive HSTS header
 zypgr.com: did not receive HSTS header
 zyso.org: could not connect to host
--- a/security/manager/ssl/nsSTSPreloadList.inc
+++ b/security/manager/ssl/nsSTSPreloadList.inc
@@ -3,17 +3,17 @@
  * 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(1521056747051000);
+const PRTime gPreloadListExpirationTime = INT64_C(1521143078420000);
 %%
 0-1.party, 1
 0.me.uk, 1
 00001.am, 1
 00002.am, 1
 0005pay.com, 1
 0010100.net, 1
 00220022.net, 1
@@ -121,17 +121,19 @@ 123test.com, 1
 123test.nl, 1
 125m125.de, 1
 12vpn.net, 1
 130.ua, 1
 132kv.ch, 1
 13318522.com, 1
 1359826938.rsc.cdn77.org, 1
 13826145000.com, 1
+1391kj.com, 1
 1395kj.com, 1
+1396.cc, 1
 1453914078.rsc.cdn77.org, 1
 1464424382.rsc.cdn77.org, 1
 14it.de, 1
 14x3.de, 1
 15-10.com, 1
 1511774230.rsc.cdn77.org, 1
 1590284872.rsc.cdn77.org, 1
 1600esplanade.com, 1
@@ -363,17 +365,16 @@ 4winds.pt, 1
 4x.fi, 1
 4x4.lk, 1
 4xlabs.co, 1
 500k.nl, 1
 500p.xyz, 1
 50lakeshore.com, 1
 50north.de, 1
 50plusnet.nl, 1
-513vpn.net, 1
 525.info, 1
 52neptune.com, 1
 5432.cc, 1
 54below.com, 1
 5533445.com, 1
 555fl.com, 1
 555xl.com, 1
 55scc.com, 1
@@ -1970,16 +1971,17 @@ ariba.info, 1
 ariege-pyrenees.net, 1
 arieswdd.com, 1
 arifp.me, 1
 arigato-java.download, 1
 arijitdg.net, 1
 arikar.eu, 1
 arima.co.ke, 1
 arinflatablefun.co.uk, 1
+aristilabs.com, 0
 aristocrates.co, 1
 aristocratps.com, 1
 aritec-la.com, 1
 arithxu.com, 1
 arivo.com.br, 1
 arizonaautomobileclub.com, 1
 arjandejong.eu, 1
 arjanvaartjes.net, 1
@@ -2057,16 +2059,17 @@ arthurmelo.com, 0
 articaexports.com, 1
 artik.cloud, 1
 artimpact.ch, 1
 artioml.net, 1
 artionet.ch, 1
 artisanhd.com, 1
 artisans-libres.com, 1
 artisense.de, 1
+artisphere.ch, 1
 artisticedgegranite.net, 1
 artlantis.nl, 1
 artleading.ru, 1
 artlego.com, 1
 artlifeisgood.com, 1
 artlogo.biz, 1
 artlogo.cz, 1
 artlogo.sk, 1
@@ -3097,17 +3100,16 @@ bestessaycheap.com, 1
 bestessayhelp.com, 1
 bestfitnesswatchreview.info, 1
 bestgiftever.ca, 1
 bestgifts4you.com, 1
 besthotsales.com, 1
 bestlashesandbrows.com, 1
 bestlashesandbrows.hu, 1
 bestleftwild.com, 1
-bestmodels.su, 1
 bestmotherfucking.website, 1
 bestoliveoils.com, 1
 bestpartyhire.com, 1
 bestperfumebrands.com, 1
 bestschools.top, 1
 bestseries.tv, 1
 bestwarezone.com, 1
 bestwebsite.gallery, 1
@@ -3362,16 +3364,17 @@ birdymanbestreviews.com, 1
 birgit-rydlewski.de, 1
 birkengarten.ch, 1
 birkhoff.me, 1
 birminghamcastlehire.co.uk, 1
 birminghamsunset.com, 1
 birthdaytip.com, 1
 birthmatters.us, 1
 birzan.org, 1
+biscoint.io, 1
 biscuits-rec.com, 1
 biscuits-shop.com, 1
 bismarck-tb.de, 1
 bison.co, 1
 bissalama.org, 1
 bistrocean.com, 1
 biswas.me, 1
 bit-cloud.de, 1
@@ -4209,21 +4212,23 @@ bruckner.li, 1
 bruna-cdn.nl, 1
 brunn.email, 1
 brunner.ninja, 1
 brunoramos.com, 1
 brunoramos.org, 1
 brunosouza.org, 1
 bruun.co, 1
 bryankaplan.com, 1
+bryanquigley.com, 1
 bs-network.net, 1
 bs-security.com, 1
 bs.sb, 1
 bs.to, 1
 bs12v.ru, 1
+bsagan.fr, 1
 bsalyzer.com, 1
 bsc-rietz.at, 1
 bsc01.dyndns.org, 1
 bsdfreak.dk, 1
 bsdracing.ca, 1
 bsdug.org, 1
 bsg-aok-muenchen.de, 1
 bsidesf.com, 1
@@ -4369,17 +4374,16 @@ burzmali.com, 1
 buserror.cn, 1
 bush41.org, 1
 bushbaby.com, 1
 bushcraftfriends.com, 1
 busindre.com, 1
 business-garden.com, 1
 business.facebook.com, 0
 business.medbank.com.mt, 1
-businessadviceperth.com.au, 0
 businessamongus.com, 1
 businesscentermarin.ch, 1
 businessesdirectory.eu, 1
 businessfurs.info, 1
 businesshub.cz, 1
 businessimmigration-eu.com, 1
 businessimmigration-eu.ru, 1
 businessmodeler.se, 1
@@ -4526,17 +4530,17 @@ caferagazzi.de, 1
 cafesg.net, 1
 caffeinatedcode.com, 1
 cainhosting.com, 0
 caipai.fm, 1
 cairnterrier.com.br, 1
 cais.de, 1
 caitcs.com, 1
 caja-pdf.es, 1
-cajio.ru, 1
+cajio.ru, 0
 cajunuk.co.uk, 1
 cake-time.co.uk, 1
 cakestart.net, 1
 caketoindia.com, 1
 cakingandbaking.com, 1
 cal.goip.de, 1
 calaad.net, 1
 calabasaselectrical.com, 1
@@ -5045,17 +5049,16 @@ chalker.io, 1
 chalkfestival.org, 0
 challengeblog.org, 1
 challengeskins.com, 1
 chamathellawala.com, 1
 chambion.ch, 1
 chameleon-ents.co.uk, 1
 chameth.com, 1
 chamilo.org, 1
-champ.dog, 1
 champdogs.co.uk, 1
 champdogs.com, 1
 champicreuse.fr, 1
 championcastles.ie, 1
 championnat-romand-cuisiniers-amateurs.ch, 1
 champions.co, 1
 championweb.com.au, 1
 champonthis.de, 1
@@ -5201,17 +5204,16 @@ cheltenhambounce.co.uk, 1
 cheltenhambouncycastles.co.uk, 1
 cheltik.ru, 1
 chemicalguys-ruhrpott.de, 1
 chenapartment.com, 1
 chengl.com, 1
 chengtongled.com, 1
 chenky.com, 1
 chennien.com, 1
-chentianyi.cn, 1
 chenzhekl.me, 1
 cherevoiture.com, 1
 cherrett.digital, 1
 cherrydropscandycarts.co.uk, 1
 cherryonit.com, 1
 cherrywoodtech.com, 1
 chertseybouncycastles.co.uk, 1
 chesspoint.ch, 1
@@ -5467,17 +5469,16 @@ ciss.ltd, 1
 cisy.me, 1
 citationgurus.com, 1
 citcuit.in, 1
 citimarinestore.com, 1
 citizen-cam.de, 1
 citizensbankal.com, 1
 citizenscience.gov, 1
 citizensleague.org, 1
-citizenspact.eu, 1
 citizing.org, 1
 citra-emu.org, 1
 citrusui.me, 1
 cittadesign.com, 0
 citton.com.br, 1
 citya.com, 1
 citybusexpress.com, 1
 citylights.eu, 1
@@ -5879,16 +5880,17 @@ colo-tech.com, 1
 colombian.dating, 1
 coloppe.com, 1
 coloradolottery.com, 1
 coloraid.net, 1
 colorblindprogramming.com, 1
 colorbrush.ru, 1
 colorcentertoner.com.br, 1
 colorcodedlyrics.com, 1
+colorectalcompounding.com, 1
 coloringnotebook.com, 1
 coloristcafe.com, 1
 colorsbycarin.com, 1
 colossal-events.co.uk, 1
 colourfulcastles.co.uk, 1
 colson-occasions.be, 1
 columbuswines.com, 1
 colyakootees.com, 1
@@ -5904,16 +5906,17 @@ comdurav.com, 1
 comefollowme2016.com, 1
 comeoncolleen.com, 1
 comercialtrading.eu, 1
 comerford.net, 1
 comeseetv.com, 1
 comestoarra.com, 1
 cometbot.cf, 1
 cometcache.com, 1
+cometonovascotia.ca, 1
 comff.net, 1
 comfintouch.com, 1
 comflores.com.br, 1
 comfypc.com, 1
 comhack.com, 1
 comico.info, 1
 comicrelief.com, 1
 comicspornos.com, 1
@@ -5931,17 +5934,16 @@ commoncode.com.au, 1
 commoncode.io, 1
 commoncore4kids.com, 1
 community-cupboard.org, 1
 communityblog.fedoraproject.org, 1
 communitycodeofconduct.com, 1
 communityflow.info, 1
 communote.net, 1
 comocurarlashemorroides.org, 1
-comocurarlashemorroidesya.com, 1
 comodesinflamarlashemorroides.org, 1
 comodo.nl, 1
 comodormirmasrapido.com, 1
 comogene.com, 1
 comopuededejardefumar.net, 1
 comoquitarlasestriasrapidamente.com, 1
 comorecuperaratumujerpdf.com, 1
 comp2go.com.au, 1
@@ -6237,16 +6239,17 @@ course.pp.ua, 1
 coursera.org, 1
 courses.nl, 1
 courseworkbank.info, 1
 courtlistener.com, 1
 cousincouples.com, 1
 covbounce.co.uk, 1
 cove.sh, 1
 covenantoftheriver.org, 1
+coverdat.com, 1
 covermytrip.com.au, 1
 covershousing.nl, 1
 covoiturage.fr, 0
 covve.com, 1
 covybrat.cz, 1
 cowbird.org, 1
 cowboyim.com, 1
 coweo.cz, 1
@@ -7373,16 +7376,17 @@ devafterdark.com, 1
 devalps.eu, 1
 devb.nl, 1
 devcast.io, 1
 devct.cz, 0
 devdesco.com, 1
 devdom.io, 1
 devdoodle.net, 1
 devel.cz, 1
+develop.cool, 1
 developer.mydigipass.com, 0
 developerfair.com, 1
 developermail.io, 1
 developers.facebook.com, 0
 developersclub.website, 1
 developfx.com, 1
 developmentaid.org, 1
 developmentsites.melbourne, 1
@@ -7406,17 +7410,16 @@ devlatron.net, 1
 devlogr.com, 1
 devlux.ch, 1
 devolution.ws, 1
 devonsawatzky.ca, 1
 devops-survey.com, 1
 devops.moe, 1
 devpgsv.com, 1
 devpsy.info, 1
-devstaff.gr, 1
 devyn.ca, 1
 devzero.io, 1
 dewalch.net, 1
 dewapress.com, 1
 dexalo.de, 1
 dezeregio.nl, 1
 dezet-ev.de, 1
 dezintranet.com, 1
@@ -8113,17 +8116,16 @@ drjoe.ca, 1
 drjuanitacollier.com, 1
 drkhsh.at, 1
 drkmtrx.xyz, 1
 drlangsdon.com, 1
 drlazarina.net, 1
 drms.us, 1
 drobniuch.pl, 0
 drogoz.moe, 1
-drogueriaelbarco.com, 1
 droidapp.nl, 1
 droidgyan.com, 1
 droidhere.com, 1
 droidim.com, 1
 droidwave.com, 1
 droidwiki.de, 1
 droithxn.com, 1
 drone-it.net, 1
@@ -8194,21 +8196,21 @@ duckbase.com, 1
 duckduckstart.com, 1
 duckinc.net, 1
 duckyubuntu.tk, 1
 ducohosting.com, 1
 duelsow.eu, 1
 duernberg.at, 1
 duesee.org, 1
 dufrei.com, 1
-dugnet.com, 1
-dugnet.io, 1
-dugnet.net, 1
-dugnet.org, 1
-dugnet.tech, 1
+dugnet.com, 0
+dugnet.io, 0
+dugnet.net, 0
+dugnet.org, 0
+dugnet.tech, 0
 dugunedavet.com, 1
 duh.se, 1
 duijf.info, 1
 duijfathome.nl, 1
 duitang.com, 1
 dukan-recepty.ru, 1
 dukegat.de, 1
 dukesatqueens.com, 1
@@ -8221,17 +8223,16 @@ dumbeartech.com, 1
 dumbomove.com.au, 1
 dumino.bg, 1
 dunableguitars.com, 0
 dunashoes.com, 1
 duncancmt.com, 1
 duncanfamilytrust.org, 1
 duncanwinfrey.com, 1
 dundalkdonnie.com, 1
-dune.io, 1
 dunea.nl, 1
 dungeon-bbs.de, 1
 dunmanelectric.com, 1
 duo.com, 1
 duo.money, 1
 duole30.com, 1
 duoluodeyu.com, 1
 dupisces.com.tw, 1
@@ -8499,17 +8500,16 @@ edicct.com, 1
 edisonchee.com, 1
 edisonlee55.com, 1
 edisonnissanparts.com, 1
 edit.yahoo.com, 0
 edited.de, 1
 edition-bambou.com, 1
 edition-sonblom.de, 1
 editoraacademiacrista.com.br, 1
-edlinus.cn, 1
 edmundcelis.com, 1
 edoss.co.za, 1
 edp-collaborative.com, 1
 edsm.net, 1
 edstep.com, 1
 edtech-hub.com, 1
 edtechwebb.com, 1
 edu6.cloud, 1
@@ -8793,17 +8793,16 @@ elyisus.info, 1
 elytronsecurity.com, 1
 em-biotek.cz, 1
 emailfuermich.de, 1
 emailhunter.co, 1
 emailprivacytester.com, 1
 emailtools.io, 1
 emaily.eu, 1
 emanuelduss.ch, 1
-emanuelemazzotta.com, 1
 emavok.eu, 1
 embassycargo.eu, 1
 embellir-aroma.com, 1
 embellir-kyujin.com, 1
 embox.net, 1
 embraceni.org, 1
 embracethedarkness.co.uk, 1
 embroideryexpress.co.uk, 1
@@ -8818,16 +8817,17 @@ emergenzalavoro.com, 1
 emero.de, 1
 emi-air-comprime.com, 1
 emi.im, 1
 emielraaijmakers.nl, 1
 emil.click, 1
 emilong.com, 1
 emilstahl.dk, 1
 emilvarga.com, 1
+emilyjohnson.ga, 1
 emilyshepherd.me, 1
 eminhuseynov.com, 1
 emirabiz.com, 0
 emirichardson.com, 1
 emivauthey.com, 1
 emkanrecords.com, 1
 emkei.cz, 1
 emma-o.com, 1
@@ -9013,17 +9013,17 @@ epicwalnutcreek.com, 1
 epilis.gr, 1
 epiphyte.network, 1
 epistas.com, 1
 epistas.de, 1
 epitesz.co, 1
 epizentrum.work, 1
 epizentrum.works, 1
 epmcentroitalia.it, 1
-epoch.com, 0
+epoch.com, 1
 epolitiker.com, 1
 epos-distributor.co.uk, 1
 eposbirmingham.co.uk, 1
 eposbrighton.co.uk, 1
 eposbristol.co.uk, 1
 eposcardiff.co.uk, 1
 eposcloud.net, 1
 eposkent.co.uk, 1
@@ -9565,16 +9565,17 @@ fabianackle.ch, 1
 fabianasantiago.com, 1
 fabianfranke.de, 1
 fabienbaker.com, 1
 fabienne-roux.org, 1
 fabled.com, 1
 fableforge.nl, 1
 fabriceleroux.com, 1
 fabriziorocca.it, 1
+fabrysociety.org, 1
 fabse.net, 1
 fabulouslyyouthfulskin.com, 1
 fabulouslyyouthfulskineyeserum.com, 1
 facanabota.com, 1
 facanabota.com.br, 1
 facciadastile.it, 1
 facealacrise.fr, 1
 facebattle.com, 1
@@ -9787,17 +9788,16 @@ fdsys.gov, 0
 feac.us, 1
 feaden.me, 1
 fearghus.org, 1
 fearsomegaming.com, 1
 feastr-dev.de, 1
 feastr.de, 1
 feastr.io, 1
 featherweightlabs.com, 1
-featuredmen.com, 1
 fecik.sk, 1
 fed51.com, 1
 federalinvestments.gov, 1
 federaljobs.gov, 1
 federalregister.gov, 0
 federicomigliavacca.it, 1
 fedinvest.gov, 1
 fedjobs.gov, 1
@@ -10623,17 +10623,16 @@ frokenblomma.se, 1
 frolov.net, 1
 frolova.org, 1
 fromlemaytoz.com, 1
 fromscratch.rocks, 1
 front-end.dog, 1
 fronteers.nl, 0
 frontline.cloud, 1
 frontline6.com, 1
-fropky.com, 1
 frostbytes.net, 1
 frostwarning.com, 1
 frosty-gaming.xyz, 1
 frothy.coffee, 1
 froufe.com, 1
 frowin-stemmer.de, 0
 frozen-geek.net, 1
 frozen-solid.net, 1
@@ -10767,17 +10766,16 @@ furnfurs.com, 1
 furnishedproperty.com.au, 1
 furnitureconcept.co.uk, 1
 furry.agency, 1
 furry.dk, 1
 furtivelook.com, 1
 fusa-miyamoto.jp, 1
 fuseos.net, 1
 fushee.com, 1
-fuskator.com, 1
 fussball-xxl.de, 1
 fussell.io, 1
 futbolvivo.tv, 1
 futos.de, 1
 futrou.com, 1
 futurefire.de, 1
 futurefundapp.com, 1
 futurenda.com, 1
@@ -11355,17 +11353,17 @@ givingnexus.org, 0
 gix.net.pl, 1
 gixtools.co.uk, 1
 gixtools.com, 1
 gixtools.net, 1
 gixtools.uk, 1
 gizmo.ovh, 1
 gj-bochum.de, 1
 gjcampbell.co.uk, 1
-gjengset.com, 0
+gjengset.com, 1
 gjspunk.de, 0
 gjung.com, 0
 gkralik.eu, 1
 gl.search.yahoo.com, 0
 gladwellentertainments.co.uk, 1
 glahcks.com, 1
 glamguru.co.il, 1
 glamguru.world, 1
@@ -11544,17 +11542,16 @@ gorf.chat, 1
 gorf.club, 1
 gorgiaxx.com, 1
 gorky.media, 1
 gorn.ch, 1
 gorod74.ru, 0
 gorschenin.com, 1
 gosccs.com, 1
 gosciencegirls.com, 1
-gosharewood.com, 1
 goshawkdb.io, 1
 goshin-group.co.jp, 1
 gospelfollower.com, 1
 gospelofmark.ch, 1
 gospelvestcination.de, 1
 gostudy.net, 1
 gosuland.org, 1
 gotech.com.eg, 0
@@ -12065,16 +12062,17 @@ hansolrella.com, 1
 hansvaneijsden.com, 1
 hansvaneijsden.nl, 1
 hantse.com, 1
 hanu.la, 1
 hanxv.pw, 1
 hanys.xyz, 1
 hanzubon.jp, 1
 hao-zhang.com, 1
+haogoodair.ca, 1
 haozhang.org, 1
 hapijs.cn, 1
 hapissl.com, 1
 hapivm.com, 1
 happist.com, 0
 happyagain.de, 1
 happyagain.se, 1
 happybounce.co.uk, 1
@@ -12143,16 +12141,17 @@ hashi.dk, 1
 hashiconf.com, 1
 hashiconf.eu, 1
 hashicorp.com, 1
 hashidays.com, 1
 hashimah.ca, 1
 hashinteractive.com, 1
 hashish.net, 1
 hashiura.jp, 1
+hashnode.com, 1
 hashplex.com, 1
 hashru.nl, 1
 hashworks.net, 1
 haskovec.com, 1
 hasselbach-dellwig.de, 1
 hatarisecurity.co.ke, 1
 hatcherlawgroupnm.com, 1
 hatethe.uk, 1
@@ -13389,17 +13388,17 @@ immersionwealth.com, 1
 immersivewebportal.com, 1
 immigrationdirect.com.au, 1
 immo-passion.net, 1
 immo-vk.de, 1
 immobilien-badlippspringe.de, 1
 immobilien-wallat.de, 1
 immobilier-nice.fr, 1
 immobilier92.net, 1
-immobiza.com, 1
+immobiza.com, 0
 immortal.run, 1
 immunicity.st, 1
 imokuri123.com, 1
 imoner.com, 1
 imoner.ga, 1
 imouyang.com, 1
 impact.health.nz, 1
 impacter.eu, 1
@@ -13747,17 +13746,16 @@ intracom.com, 1
 intradayseasonals.com, 1
 intramanager.co.uk, 1
 intramanager.dk, 1
 intranetsec-regionra.fr, 1
 intraobes.com, 1
 intrasoft.com.au, 1
 intraxia.com, 1
 introvertedtravel.space, 1
-intune.life, 1
 intux.be, 0
 intvonline.com, 1
 intxt.net, 1
 inusasha.de, 1
 inuyasha-petition.tk, 1
 invasion.com, 1
 invenio.software, 1
 inventaire.ch, 1
@@ -13945,16 +13943,17 @@ isoroc-nidzica.pl, 1
 isowosi.com, 1
 ispo.com.tw, 1
 ispringcloud.ru, 1
 ispsoft.pro, 1
 ispweb.es, 1
 isqrl.de, 1
 israelbizreg.com, 1
 israkurort.com, 1
+isreedyintheuk.com, 1
 issasfrissa.se, 1
 issforum.org, 1
 issio.net, 1
 isslshop.com, 1
 issue.watch, 1
 issuesofconcern.in, 1
 ist-intim.de, 1
 istanbul.systems, 1
@@ -14435,16 +14434,17 @@ jettlarue.com, 1
 jetwhiz.com, 1
 jetzt-elektromobil.de, 1
 jeugdkans.nl, 1
 jeva.nl, 1
 jevisite.ca, 1
 jeweet.net, 1
 jez.nl, 1
 jf-projects.de, 0
+jfnllc.com, 1
 jfr.im, 1
 jfreitag.de, 1
 jgid.de, 1
 jgke.fi, 1
 jgwb.de, 1
 jgwb.eu, 1
 jhalderm.com, 1
 jhaveri.net, 1
@@ -15276,16 +15276,17 @@ khoury-dulla.ch, 1
 khs1994.com, 1
 kiadoapartman.hu, 1
 kiahoriane.com, 1
 kiano.net, 1
 kiapartscenter.net, 1
 kiapartsdepartment.com, 1
 kiapps.ovh, 1
 kibibit.net, 1
+kibriscicek.net, 1
 kick-in.nl, 1
 kickasscanadians.ca, 1
 kickedmycat.com, 1
 kickerplaza.nl, 1
 kidbacker.com, 1
 kiddyboom.ua, 1
 kids-at-home.ch, 1
 kids-castles.com, 1
@@ -15428,17 +15429,19 @@ kittmedia.com, 1
 kittpress.com, 1
 kittyhacker101.tk, 1
 kiwi.digital, 1
 kiwi.global, 1
 kiwipayment.com, 1
 kiwipayments.com, 1
 kiwiplace.com, 1
 kj-prince.com, 1
+kj1391.com, 1
 kj1396.net, 1
+kj1397.com, 1
 kjaer.io, 1
 kjarni.cc, 1
 kjarrval.is, 1
 kjchernov.info, 1
 kjellner.com, 1
 kjellvn.net, 1
 kjoglum.me, 1
 kk-neudorf-duissern.de, 0
@@ -16100,16 +16103,17 @@ latour-managedcare.ch, 1
 latremebunda.com, 1
 latrine.cz, 1
 latterdaybride.com, 1
 lattyware.co.uk, 1
 lattyware.com, 1
 laubacher.io, 1
 lauchundei.at, 1
 laufcampus.com, 1
+laufpix.de, 1
 laufseminare-laufreisen.com, 1
 lauftrainer-ausbildung.com, 1
 lauftreff-himmelgeist.de, 1
 laughinggrapepublishing.com, 1
 laukstein.com, 1
 launchpad-app2.com, 1
 lauraandwill.wedding, 1
 laurakashiwase.com, 1
@@ -16127,17 +16131,17 @@ lavabit.no, 1
 lavalite.de, 1
 lavamob.com, 1
 lavapot.com, 1
 lavaux.lv, 1
 lavenderx.org, 1
 lavita.de, 1
 lavitrine-une-collection.be, 1
 lavolte.net, 1
-lavval.com, 1
+lavval.com, 0
 law-peters.de, 1
 lawformt.com, 1
 lawn-seeds.com, 1
 lawnuk.com, 1
 lawrence-institute.com, 1
 lawrencemurgatroyd.com, 1
 laylo.nl, 1
 laymans911.info, 1
@@ -16377,16 +16381,17 @@ lesscloud.com, 1
 lessets-graphiques.com, 1
 lessing.consulting, 1
 lessis.moe, 1
 lesterrassesdusoleil.ch, 1
 lesyndicat.info, 1
 let-go.cc, 1
 letemps.ch, 1
 leticiagomeztagle.com, 1
+letitfly.me, 1
 lets-bounce.com, 1
 lets-go-acoustic.de, 1
 lets-ktai.jp, 1
 lets.ninja, 1
 lets.nu, 1
 letsbounceuk.com, 1
 letsencrypt-for-cpanel.com, 1
 letsgame.nl, 1
@@ -16722,16 +16727,17 @@ livekort.no, 1
 livekort.se, 1
 livekortti.com, 1
 livekortti.fi, 1
 livelexi.com, 1
 livepaperhelp.com, 1
 liveperformersmeeting.net, 1
 liveregistratie.nl, 1
 livesure.com, 1
+livi.co, 1
 living-space.co.nz, 1
 living24.de, 1
 livingforreal.com, 1
 livingworduk.org, 1
 livnev.me, 1
 livnev.xyz, 1
 livolett.de, 1
 livrariacoad.com.br, 1
@@ -17001,17 +17007,16 @@ ltba.org, 1
 ltecode.com, 1
 ltls.org, 1
 ltn-tom-morel.fr, 1
 ltransferts.com, 1
 lu.search.yahoo.com, 0
 luav.org, 1
 lubar.me, 1
 lubbockyounglawyers.org, 1
-lubomirkazakov.com, 1
 lubot.net, 0
 luc-oberson.ch, 1
 luca.swiss, 1
 lucasantarella.com, 1
 lucascantor.com, 1
 lucascodes.com, 1
 lucasem.com, 1
 lucasgaland.com, 1
@@ -17698,17 +17703,16 @@ matildajaneclothing.com, 1
 matjaz.it, 1
 matlss.com, 1
 matomeathena.com, 1
 matriterie-sdv.ro, 1
 matrixmedia.ro, 1
 matrixreq.com, 1
 matsu-semi.com, 1
 mattandyana.com, 1
-mattberryman.com, 1
 mattbsg.xyz, 1
 mattcarr.net, 0
 mattcoles.io, 1
 matteomarescotti.it, 1
 mattferderer.com, 1
 mattforster.ca, 1
 matthecat.com, 1
 matthew-carson.info, 1
@@ -17788,17 +17792,16 @@ mayoristassexshop.com, 1
 maypolevilla.co.uk, 1
 mayrhofer.eu.org, 1
 mazda-mps.de, 1
 mazda-thermote.com, 1
 mazda626.net, 1
 maze.fr, 1
 mazternet.ru, 1
 mazurlabs.tk, 1
-mazzotta.me, 1
 mb-is.info, 1
 mbaestlein.de, 1
 mbainflatables.co.uk, 1
 mbardot.com, 1
 mbasic.facebook.com, 0
 mbcars.be, 1
 mbdrogenbos-usedcars.be, 1
 mbeo.ch, 1
@@ -17863,16 +17866,17 @@ mcyukon.com, 1
 md5file.com, 1
 md5hashing.net, 1
 mdbouncycastlehirelondon.co.uk, 1
 mdcloudpracticesolutions.com, 1
 mdcloudps.com, 1
 mdek.at, 1
 mdewendt.de, 1
 mdf-bis.com, 1
+mdkr.nl, 1
 mdma.net, 1
 mdmed.clinic, 1
 mdoering.de, 1
 mdosch.de, 1
 mdpraha.cz, 1
 mdsave.com, 1
 mdwftw.com, 1
 mdx.no, 1
@@ -18016,16 +18020,17 @@ melakaltenegger.at, 1
 melaniebernhardt.com, 1
 melaniebilodeau.com, 1
 melaniegruber.de, 1
 melbourne.dating, 1
 melbourneapartments.website, 1
 melchizedek-forum.de, 1
 meldcode-assistent.nl, 1
 melearning.university, 0
+meledia.com, 1
 melenchatsmelenchiens.fr, 1
 melerpaine.com, 1
 melf.nl, 1
 melhoresdominios.com, 1
 melhoresmarcasdenotebook.com.br, 1
 melhorproduto.com.br, 1
 melikoff.es, 1
 melina-schefczyk.de, 1
@@ -18280,16 +18285,17 @@ migueldominguez.ch, 1
 miguelgfierro.com, 1
 miguelmartinez.ch, 1
 miguelmenendez.pro, 1
 miguelmoura.com, 1
 miguia.tv, 1
 mihnea.net, 1
 mijnkerstkaarten.be, 1
 mijnreisoverzicht.nl, 1
+mijnstembureau.nl, 1
 mijntransacties.nl, 1
 mika.cat, 1
 mika.moe, 1
 mikadoe.nl, 1
 mikaela.info, 1
 mikakalevi.com, 1
 mikalikes.men, 1
 mike-bland.com, 1
@@ -18489,17 +18495,16 @@ mitsign.com, 1
 mitsu-szene.de, 1
 mitsukabose.com, 1
 mittagonggardencentre.com.au, 1
 mittelunsachlich.de, 1
 mitzpettel.com, 1
 miui-germany.de, 1
 miukimodafeminina.com, 1
 mivzakim.net, 1
-miweb.cr, 1
 mixnshake.com, 1
 mixposure.com, 1
 mixtape.moe, 1
 miya.io, 1
 miyako-kyoto.jp, 1
 miyatore.com, 1
 miyoshi-kikaku.co.jp, 1
 miyoshi-kikaku.com, 1
@@ -18877,17 +18882,17 @@ mpg.ovh, 1
 mpi-sa.fr, 1
 mpintaamalabanna.it, 1
 mplanetphl.fr, 1
 mplant.io, 1
 mplicka.cz, 1
 mplusm.eu, 1
 mpn.poker, 1
 mpnpokertour.com, 1
-mpreserver.com, 0
+mpreserver.com, 1
 mpserver12.org, 1
 mpsgarage.com.au, 1
 mpsoundcraft.com, 1
 mpy.ovh, 1
 mr-anderson.org, 1
 mr-labo.jp, 1
 mr-nachhilfe.de, 1
 mr-wolf.nl, 1
@@ -19913,17 +19918,16 @@ nickcleans.co.uk, 1
 nickcraver.com, 1
 nickdekruijk.nl, 1
 nickguyver.com, 1
 nickloose.de, 1
 nickmorri.com, 1
 nickrickard.co.uk, 1
 nickstories.de, 1
 niclasreich.de, 1
-nico.one, 1
 nico.st, 1
 nicocourts.com, 1
 nicoknibbe.nl, 1
 nicolaeiotcu.ro, 1
 nicolaelmer.ch, 1
 nicolajanedesigns.co.uk, 1
 nicolas-dumermuth.com, 1
 nicolas-hoffmann.net, 1
@@ -20123,16 +20127,17 @@ noodles.net.nz, 1
 noodleyum.com, 1
 noodplan.co.za, 1
 noodweer.be, 1
 noon-entertainments.com, 1
 noop.ch, 1
 noordsee.de, 1
 noorsolidarity.com, 1
 nootropic.com, 1
+nootropicsource.com, 1
 nopaste.xyz, 1
 nopaynocure.com, 1
 nord-sud.be, 1
 nordakademie.de, 1
 nordic-survival.de, 1
 nordiccasinocommunity.com, 1
 nordinfo.fi, 1
 nordmoregatebilklubb.com, 1
@@ -20336,17 +20341,17 @@ nvr.bz, 1
 nwerc.party, 1
 nwgh.org, 0
 nwk1.com, 1
 nwra.com, 1
 nwwc.dk, 1
 nwwnetwork.net, 1
 nxinfo.ch, 1
 nyan.it, 1
-nyanpasu.tv, 1
+nyanpasu.tv, 0
 nyantec.com, 1
 nycoyote.org, 1
 nydnxs.com, 1
 nyffo.com, 1
 nyiad.edu, 1
 nyip.co.uk, 1
 nyip.edu, 1
 nyloc.de, 1
@@ -22203,16 +22208,17 @@ postblue.info, 1
 postbox.life, 1
 postcardpayment.com, 1
 postcode.nl, 1
 postcodegarant.nl, 1
 postdarwinian.com, 1
 postdarwinism.com, 1
 postdeck.de, 1
 posteo.de, 0
+posterspy.com, 1
 postfalls-naturopathic.com, 1
 postfinance.ch, 1
 postmatescode.com, 1
 postn.eu, 1
 postpot.co.kr, 1
 posttigo.com, 1
 potatiz.com, 1
 potatofrom.space, 0
@@ -22297,17 +22303,16 @@ prefix.eu, 1
 pregunteleakaren.gov, 1
 preigu.de, 1
 preis-alarm.info, 1
 preis-alarm.org, 1
 preisser-it.de, 1
 preisser.it, 1
 prekladysanca.cz, 1
 preloaded-hsts.badssl.com, 1
-prelogica.com.br, 1
 preludes.org, 1
 prelved.com, 1
 prelved.es, 1
 prelved.fi, 1
 prelved.fr, 1
 prelved.it, 1
 prelved.nl, 1
 prelved.pl, 1
@@ -22536,16 +22541,17 @@ propertygroup.pl, 1
 propertyone.mk, 1
 propipesystem.com, 1
 proplan.co.il, 1
 propmag.co, 1
 proposalonline.com, 1
 propr.no, 1
 propseller.com, 1
 proslimdiets.com, 1
+prosocialmachines.com, 1
 prospanek.cz, 1
 prospo.co, 1
 prostohobby.ru, 1
 prostye-recepty.com, 1
 prot.ch, 1
 proteapower.co.za, 1
 protecciondelconsumidor.gov, 1
 protegetudescanso.com, 1
@@ -22558,17 +22564,17 @@ protonmail.ch, 1
 protonmail.com, 1
 protonvpn.com, 1
 prototypefund.de, 1
 protoxin.net, 0
 proust.ch, 0
 proust.media, 0
 proustmedia.de, 0
 provectus.de, 1
-proveits.me, 1
+proveits.me, 0
 provence-appartements.com, 1
 provision-isr.nl, 1
 provisionaldriving.com, 1
 provitacare.com, 1
 provitec.com, 1
 provitec.de, 1
 provokator.co.il, 1
 proweser.de, 1
@@ -23422,17 +23428,16 @@ repaper.org, 1
 repaxan.com, 1
 repex.co.il, 1
 replaceits.me, 1
 replicagunsswords.com, 0
 replicaswiss.nl, 1
 report-incident.de, 1
 report-to.io, 1
 report-uri.com, 1
-report-uri.io, 1
 report-url.com, 1
 report-url.io, 1
 reported.ly, 1
 reporting.gov, 0
 reporturi.com, 1
 reporturi.io, 1
 reporturl.com, 1
 reporturl.io, 1
@@ -23927,16 +23932,17 @@ royalcitytaxi.com, 1
 royalmarinesassociation.org.uk, 1
 royalnissanparts.com, 1
 royalpalacenogent.fr, 1
 royalrangers.fi, 1
 royalty-market.com, 1
 royalvisiongroup.com, 1
 royzez.com, 1
 rozalisbengal.ro, 1
+rozalynne-dawn.ga, 1
 rozhodce.cz, 1
 rpadovani.com, 1
 rpasafrica.com, 1
 rpgmaker.es, 1
 rpherbig.com, 1
 rpine.net, 1
 rpy.xyz, 1
 rq-labo.jp, 1
@@ -24179,16 +24185,17 @@ sagemontchurch.org, 1
 sagerus.com, 1
 sagsmarseille.com, 1
 sahar.io, 1
 sahb.dk, 1
 sahkotyot.eu, 1
 said.id, 1
 said.my.id, 1
 saier.me, 1
+saifoundation.in, 1
 saigonflowers.com, 1
 saigonstar.de, 1
 saikarra.com, 1
 saikou.moe, 1
 saikouji.tokushima.jp, 1
 sailormoonevents.org, 0
 saimoe.moe, 1
 saimoe.org, 1
@@ -25285,17 +25292,16 @@ sidelka-tver.ru, 1
 sidepodcast.com, 1
 sidepodcastdaily.com, 1
 sidepodcastextra.com, 1
 sideshowbarker.net, 1
 sidium.de, 1
 sidnicio.us, 1
 sidonge.com, 1
 sidongkim.com, 1
-sidpod.ru, 1
 siebeve.be, 1
 siegemund-frankfurt.de, 1
 sieh.es, 1
 sientemendoza.com.ar, 1
 sieulog.com, 1
 siewert-kau.de, 1
 sift-tool.org, 1
 sig6.org, 1
@@ -25402,16 +25408,17 @@ silverstartup.sk, 1
 silverwind.io, 1
 silviamacallister.com, 1
 silvine.xyz, 1
 silvistefi.com, 1
 sim-karten.net, 1
 sim-sim.appspot.com, 1
 sim4seed.org, 1
 simam.de, 1
+simbeton.nl, 1
 simbolo.co.uk, 0
 simeonoff.ninja, 1
 simetal.ch, 1
 simfed.org, 1
 simlau.net, 1
 simmis.fr, 1
 simoesgoulart.com.br, 1
 simon-hofmann.org, 1
@@ -26275,17 +26282,16 @@ squirex2.com, 1
 squirtlesbians.net, 1
 sqzryang.com, 1
 sr-cs.net, 1
 srandom.com, 1
 srbija-nekretnine.org, 1
 src.fedoraproject.org, 1
 srchub.org, 1
 srinivasan.io, 1
-sritest.io, 1
 sro.center, 1
 srolim.com, 1
 srrdb.com, 1
 srroddy.com, 1
 srv.so, 1
 srvc.io, 1
 srvonfire.com, 1
 ss-x.ru, 1
@@ -26465,17 +26471,17 @@ stedb.eu, 1
 stedbg.net, 1
 steef389.eu, 1
 steelephys.com.au, 1
 steemit.com, 1
 steenackers.be, 1
 stefan-bayer.eu, 1
 stefan-schlueter.de, 1
 stefanbayer.de, 1
-stefanovski.io, 0
+stefanovski.io, 1
 stefany.eu, 1
 steffi-in-australien.com, 1
 steidlewirt.de, 1
 steigerplank.com, 0
 steinbergmedia.de, 1
 steinibox.de, 1
 steklein.de, 1
 stella-artis-ensemble.at, 1
@@ -26540,17 +26546,16 @@ stevens.se, 1
 stevensheffey.me, 1
 stevenski.com, 0
 steventress.com, 1
 stevenwooding.com, 1
 stevenz.xyz, 1
 stevesdrivingschooltyneside.com, 1
 stewartswines.com, 1
 stewonet.nl, 1
-steyaert.be, 1
 stfw.info, 1
 stichtingliab.nl, 1
 stichtingscholierenvervoerzeeland.nl, 1
 stichtingsticky.nl, 1
 stick2bike.de, 1
 stickergiant.com, 1
 stickies.io, 1
 stickmanventures.com, 1
@@ -26601,16 +26606,17 @@ stomt.com, 1
 stonedworms.de, 1
 stonefusion.org.uk, 1
 stonehammerhead.org, 1
 stonemain.eu, 1
 stonemanbrasil.com.br, 1
 stony.com, 1
 stonystratford.org, 1
 stopakwardhandshakes.org, 1
+stopbreakupnow.org, 1
 stopbullying.gov, 1
 stopfraud.gov, 1
 stopthethyroidmadness.com, 1
 stordbatlag.no, 1
 store-host.com, 1
 store10.de, 1
 storedsafe.com, 1
 storgom.ua, 0
@@ -26639,17 +26645,16 @@ stratmann-b.de, 1
 straubis.org, 1
 strauser.com, 1
 stravers.shoes, 1
 stream-ing.xyz, 1
 streamchan.org, 1
 streamdesk.ca, 1
 streamer.tips, 1
 streamlineautogroup.com, 1
-streampanel.net, 1
 streams.dyndns.org, 1
 streamthemeeting.com, 1
 streamzilla.com, 1
 street-smart-home.de, 1
 streetdancecenter.com, 1
 streets.mn, 1
 streetspotr.com, 1
 streetview.wien, 1
@@ -28012,16 +28017,17 @@ tiggeriffic.com, 1
 tiihosen.fi, 1
 tijden.nu, 1
 tijo.ch, 1
 tik.edu.ee, 1
 tik.help, 1
 tiki-god.co.uk, 1
 tiledailyshop.com, 1
 tileyourvisit.pt, 1
+tiliaze.biz, 1
 tiliaze.info, 1
 tiliaze.net, 1
 till.im, 1
 tillberg.us, 1
 tilleysbouncycastles.co.uk, 1
 tillseasyscore.com, 1
 tiltedwindmillcrafts.com, 1
 timbarlotta.com, 1
@@ -28048,18 +28054,20 @@ timmersgems.com, 1
 timmy.im, 1
 timmy.ws, 1
 timmyrs.de, 1
 timoxbrow.com, 1
 timroes.de, 1
 timstoffel.net, 0
 timtaubert.de, 1
 timtelfer.com, 1
+timtj.ca, 1
 timvandekamp.nl, 1
 timvivian.ca, 1
+timweb.ca, 1
 timysewyn.be, 1
 tinastahlschmidt.de, 1
 tinf15b4.de, 1
 tinfoilsecurity.com, 0
 tinfoleak.com, 1
 tink.network, 1
 tinker.career, 1
 tinkerboard.org, 1
@@ -28438,16 +28446,17 @@ toutenmusic.fr, 1
 toutmonexam.fr, 1
 tovare.com, 1
 toverland-tickets.nl, 1
 towandalibrary.org, 1
 towaway.ru, 1
 townandcountryus.com, 1
 townhousedevelopments.com.au, 1
 townhouseregister.com.au, 1
+townofbridgewater.ca, 1
 towywebdesigns.uk, 1
 tox.im, 1
 toxicip.com, 1
 toymania.de, 1
 toysperiod.com, 1
 tp-iryuubun.com, 1
 tp-kabushiki.com, 1
 tp-kyouyufudousan.com, 1
@@ -28478,17 +28487,16 @@ traces.ml, 1
 tracetracker.com, 1
 tracetracker.no, 1
 track.plus, 1
 trackchair.com, 1
 trackdays4fun.com, 1
 trackdomains.com, 1
 trackersimulator.org, 1
 trackeye.dk, 1
-trackmeet.io, 1
 trackrecordpro.co.uk, 1
 tractorpumps.com, 1
 trade.gov.uk, 1
 tradedesk.co.za, 1
 tradeinvent.co.uk, 1
 trademan.ky, 1
 traderjoe-cloud.de, 1
 tradietrove.com.au, 1
@@ -29216,16 +29224,17 @@ urban-culture.fr, 1
 urban.melbourne, 1
 urbanesecurity.com, 1
 urbanfi.sh, 1
 urbanguerillas.de, 1
 urbanietz-immobilien.de, 1
 urbanmelbourne.info, 1
 urbannewsservice.com, 1
 urbansparrow.in, 1
+urbanstylestaging.com, 1
 urbanwildlifealliance.org, 1
 urbexdk.nl, 1
 urcentral.com, 1
 urcentral.org, 1
 ureka.org, 1
 urgences-valais.ch, 1
 uripura.de, 1
 urist1011.ru, 1
@@ -29506,17 +29515,16 @@ vekenz.com, 1
 velasense.com, 1
 velen.io, 1
 velotyretz.fr, 1
 venalytics.com, 1
 vendigital.com, 1
 vendorconnect.nyc, 1
 venicerealdeal.com, 1
 venmos.com, 1
-venoom.eu, 1
 ventesprivees-fr.com, 1
 ventizo.com, 1
 venturavwparts.com, 1
 venturum.com, 1
 venturum.de, 1
 venturum.eu, 1
 venturum.net, 1
 vera.bg, 1
@@ -29971,17 +29979,17 @@ wabatam.com, 1
 wabifoggynuts.com, 1
 wachter.biz, 1
 wadidi.com, 1
 wadsworth.gallery, 1
 wadvisor.com, 1
 waelisch.de, 1
 waelti.xxx, 1
 wafa4hw.com, 1
-wafairhaven.com.au, 0
+wafairhaven.com.au, 1
 waffle.at, 1
 wafni.com, 1
 wahhoi.net, 0
 wahidhasan.com, 1
 wahlman.org, 1
 wahrnehmungswelt.de, 1
 wahrnehmungswelten.de, 1
 wai-in.com, 1
@@ -30075,16 +30083,17 @@ watchparts-and-tools-okayama.co.jp, 1
 watchstyle.com, 1
 watchtv-online.pw, 1
 watchweasel.com, 1
 waterfedpole.com, 1
 watermonitor.gov, 1
 watersb.org, 1
 watertrails.io, 1
 watsonwork.me, 1
+wattechweb.com, 1
 wave-ola.es, 1
 wavesboardshop.com, 1
 wavesoftime.com, 1
 wawak.pl, 1
 waxdramatic.com, 1
 waylaydesign.com, 1
 wayne.cloud, 0
 wayohoo.com, 1
@@ -30904,16 +30913,17 @@ wt-server3.de, 1
 wtf.ninja, 1
 wtfismyip.com, 1
 wth.in, 1
 wtpmj.com, 1
 wubify.com, 1
 wuchipc.com, 1
 wuerfel.wf, 1
 wuerfelmail.de, 1
+wufu.org, 0
 wug.jp, 1
 wug.news, 1
 wuji.cz, 1
 wukongmusic.us, 0
 wulpi.it, 1
 wumbo.cf, 1
 wumbo.co.nz, 1
 wumbo.ga, 1
@@ -30993,17 +31003,16 @@ www.re, 1
 www.rememberthemilk.com, 1
 www.sb, 1
 www.simbolo.co.uk, 0
 www.simple.com, 0
 www.theguardian.com, 1
 www.therapynotes.com, 1
 www.tinfoilsecurity.com, 0
 www.torproject.org, 0
-www.tumblr.com, 0
 www.twitter.com, 0
 www.united.com, 1
 www.usaa.com, 0
 www.vino75.com, 0
 www.wepay.com, 0
 www.wordpress.com, 0
 www68277.com, 1
 wxcafe.net, 1
@@ -31648,19 +31657,19 @@ z33.ch, 1
 z4k.de, 1
 z99944x.xyz, 1
 za.search.yahoo.com, 0
 zaalleatherwear.nl, 0
 zabszk.net, 1
 zacarias.com.ar, 1
 zacavi.com.br, 1
 zach.codes, 1
-zacharopoulos.eu, 1
-zacharopoulos.me, 1
-zacharopoulos.org, 1
+zacharopoulos.eu, 0
+zacharopoulos.me, 0
+zacharopoulos.org, 0
 zachborboa.com, 1
 zachgibbens.org, 1
 zachpeters.org, 1
 zaclys.com, 1
 zadarkside.ro, 1
 zadroweb.com, 1
 zafirus.name, 1
 zahe.me, 1
@@ -31704,17 +31713,16 @@ zbyte.it, 1
 zcarot.com, 1
 zcarrot.com, 1
 zcgram.com, 1
 zcr.ca, 1
 zdbl.de, 1
 zdenekspacek.cz, 1
 zdorovayasimya.com, 1
 zdrojak.cz, 1
-zdx.ch, 1
 ze3kr.com, 1
 zebbra.ro, 1
 zebedeescastles.co.uk, 1
 zeds-official.com, 1
 zeebrieshoekvanholland.nl, 1
 zeel.com, 1
 zeguigui.com, 1
 zehdenick-bleibt-bunt.de, 1
@@ -31920,17 +31928,16 @@ zunftmarke.de, 1
 zuolan.me, 1
 zup.me, 1
 zupago.com, 1
 zupago.pe, 1
 zuppy.pm, 1
 zuralski.net, 1
 zurgl.com, 1
 zurickrelogios.com.br, 1
-zurret.de, 1
 zusjesvandenbos.nl, 1
 zutsu-raku.com, 1
 zuviel.space, 1
 zuzumba.es, 1
 zvps.uk, 1
 zvxr.net, 1
 zvz.im, 1
 zwalcz-cellulit.com, 1
--- a/servo/components/selectors/attr.rs
+++ b/servo/components/selectors/attr.rs
@@ -1,15 +1,15 @@
 /* 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/. */
 
 use cssparser::ToCss;
 use parser::SelectorImpl;
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::fmt;
 
 #[derive(Clone, Eq, PartialEq)]
 pub struct AttrSelectorWithNamespace<Impl: SelectorImpl> {
     pub namespace: NamespaceConstraint<(Impl::NamespacePrefix, Impl::NamespaceUrl)>,
     pub local_name: Impl::LocalName,
     pub local_name_lower: Impl::LocalName,
     pub operation: ParsedAttrSelectorOperation<Impl::AttrValue>,
--- a/servo/components/selectors/parser.rs
+++ b/servo/components/selectors/parser.rs
@@ -9,17 +9,17 @@ use builder::{SelectorBuilder, Specifici
 use context::QuirksMode;
 use cssparser::{ParseError, ParseErrorKind, BasicParseError, BasicParseErrorKind};
 use cssparser::{SourceLocation, CowRcStr, Delimiter};
 use cssparser::{Token, Parser as CssParser, parse_nth, ToCss, serialize_identifier, CssStringWriter};
 use precomputed_hash::PrecomputedHash;
 use servo_arc::ThinArc;
 use sink::Push;
 use smallvec::SmallVec;
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::borrow::{Borrow, Cow};
 use std::fmt::{self, Display, Debug, Write};
 use std::iter::Rev;
 use std::slice;
 use visitor::SelectorVisitor;
 
 /// A trait that represents a pseudo-element.
 pub trait PseudoElement : Sized + ToCss {
--- a/servo/components/style/attr.rs
+++ b/servo/components/style/attr.rs
@@ -11,17 +11,17 @@ use app_units::Au;
 use cssparser::{self, Color, RGBA};
 use euclid::num::Zero;
 use num_traits::ToPrimitive;
 use properties::PropertyDeclarationBlock;
 use selectors::attr::AttrSelectorOperation;
 use servo_arc::Arc;
 use servo_url::ServoUrl;
 use shared_lock::Locked;
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::str::FromStr;
 use str::{HTML_SPACE_CHARACTERS, read_exponent, read_fraction};
 use str::{read_numbers, split_commas, split_html_space_chars};
 use str::str_join;
 use values::specified::Length;
 
 // Duplicated from script::dom::values.
 const UNSIGNED_LONG_MAX: u32 = 2147483647;
--- a/servo/components/style/counter_style/mod.rs
+++ b/servo/components/style/counter_style/mod.rs
@@ -10,17 +10,17 @@ use Atom;
 use cssparser::{AtRuleParser, DeclarationListParser, DeclarationParser};
 use cssparser::{Parser, Token, serialize_identifier, CowRcStr};
 use error_reporting::{ContextualParseError, ParseErrorReporter};
 #[cfg(feature = "gecko")] use gecko::rules::CounterStyleDescriptors;
 #[cfg(feature = "gecko")] use gecko_bindings::structs::nsCSSCounterDesc;
 use parser::{ParserContext, ParserErrorContext, Parse};
 use selectors::parser::SelectorParseErrorKind;
 use shared_lock::{SharedRwLockReadGuard, ToCssWithGuard};
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::borrow::Cow;
 use std::fmt;
 use std::ops::Range;
 use style_traits::{Comma, OneOrMoreSeparated, ParseError, StyleParseErrorKind, ToCss};
 use values::CustomIdent;
 
 /// Parse the prelude of an @counter-style rule
 pub fn parse_counter_style_name<'i, 't>(input: &mut Parser<'i, 't>) -> Result<CustomIdent, ParseError<'i>> {
--- a/servo/components/style/custom_properties.rs
+++ b/servo/components/style/custom_properties.rs
@@ -9,17 +9,17 @@
 use Atom;
 use cssparser::{Delimiter, Parser, ParserInput, SourcePosition, Token, TokenSerializationType};
 use precomputed_hash::PrecomputedHash;
 use properties::{CSSWideKeyword, DeclaredValue};
 use selector_map::{PrecomputedHashSet, PrecomputedHashMap};
 use selectors::parser::SelectorParseErrorKind;
 use servo_arc::Arc;
 use smallvec::SmallVec;
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::borrow::{Borrow, Cow};
 use std::cmp;
 use std::fmt;
 use std::hash::Hash;
 use style_traits::{ToCss, StyleParseErrorKind, ParseError};
 
 /// A custom property name is just an `Atom`.
 ///
--- a/servo/components/style/data.rs
+++ b/servo/components/style/data.rs
@@ -461,30 +461,16 @@ impl ElementData {
     }
 
     /// Returns whether this element has been part of a restyle.
     #[inline]
     pub fn contains_restyle_data(&self) -> bool {
         self.is_restyle() || !self.hint.is_empty() || !self.damage.is_empty()
     }
 
-    /// If an ancestor is already getting reconstructed by Gecko's top-down
-    /// frame constructor, no need to apply damage.  Similarly if we already
-    /// have an explicitly stored ReconstructFrame hint.
-    ///
-    /// See https://bugzilla.mozilla.org/show_bug.cgi?id=1301258#c12
-    /// for followup work to make the optimization here more optimal by considering
-    /// each bit individually.
-    #[cfg(feature = "gecko")]
-    pub fn skip_applying_damage(&self) -> bool { self.reconstructed_self_or_ancestor() }
-
-    /// N/A in Servo.
-    #[cfg(feature = "servo")]
-    pub fn skip_applying_damage(&self) -> bool { false }
-
     /// Returns whether it is safe to perform cousin sharing based on the ComputedValues
     /// identity of the primary style in this ElementData. There are a few subtle things
     /// to check.
     ///
     /// First, if a parent element was already styled and we traversed past it without
     /// restyling it, that may be because our clever invalidation logic was able to prove
     /// that the styles of that element would remain unchanged despite changes to the id
     /// or class attributes. However, style sharing relies on the strong guarantee that all
--- a/servo/components/style/gecko/generated/pseudo_element_definition.rs
+++ b/servo/components/style/gecko/generated/pseudo_element_definition.rs
@@ -1372,17 +1372,17 @@ impl PseudoElement {
     /// user-agent stylesheet.
     ///
     /// If we're not in a user-agent stylesheet, we will never parse anonymous
     /// box pseudo-elements.
     ///
     /// Returns `None` if the pseudo-element is not recognised.
     #[inline]
     pub fn from_slice(s: &str, in_ua_stylesheet: bool) -> Option<Self> {
-        use std::ascii::AsciiExt;
+        #[allow(unused_imports)] use std::ascii::AsciiExt;
 
         // We don't need to support tree pseudos because functional
         // pseudo-elements needs arguments, and thus should be created
         // via other methods.
             if in_ua_stylesheet || PseudoElement::After.exposed_in_non_ua_sheets() {
                 if s.eq_ignore_ascii_case("after") {
                     return Some(PseudoElement::After);
                 }
@@ -1742,17 +1742,17 @@ impl PseudoElement {
     }
 
     /// Constructs a tree pseudo-element from the given name and arguments.
     /// "name" must start with "-moz-tree-".
     ///
     /// Returns `None` if the pseudo-element is not recognized.
     #[inline]
     pub fn tree_pseudo_element(name: &str, args: Box<[Atom]>) -> Option<Self> {
-        use std::ascii::AsciiExt;
+        #[allow(unused_imports)] use std::ascii::AsciiExt;
         debug_assert!(name.starts_with("-moz-tree-"));
         let tree_part = &name[10..];
             if tree_part.eq_ignore_ascii_case("column") {
                 return Some(PseudoElement::MozTreeColumn(args));
             }
             if tree_part.eq_ignore_ascii_case("row") {
                 return Some(PseudoElement::MozTreeRow(args));
             }
--- a/servo/components/style/gecko/pseudo_element_definition.mako.rs
+++ b/servo/components/style/gecko/pseudo_element_definition.mako.rs
@@ -220,17 +220,17 @@ impl PseudoElement {
     /// user-agent stylesheet.
     ///
     /// If we're not in a user-agent stylesheet, we will never parse anonymous
     /// box pseudo-elements.
     ///
     /// Returns `None` if the pseudo-element is not recognised.
     #[inline]
     pub fn from_slice(s: &str, in_ua_stylesheet: bool) -> Option<Self> {
-        use std::ascii::AsciiExt;
+        #[allow(unused_imports)] use std::ascii::AsciiExt;
 
         // We don't need to support tree pseudos because functional
         // pseudo-elements needs arguments, and thus should be created
         // via other methods.
         % for pseudo in SIMPLE_PSEUDOS:
             if in_ua_stylesheet || ${pseudo_element_variant(pseudo)}.exposed_in_non_ua_sheets() {
                 if s.eq_ignore_ascii_case("${pseudo.value[1:]}") {
                     return Some(${pseudo_element_variant(pseudo)});
@@ -242,17 +242,17 @@ impl PseudoElement {
     }
 
     /// Constructs a tree pseudo-element from the given name and arguments.
     /// "name" must start with "-moz-tree-".
     ///
     /// Returns `None` if the pseudo-element is not recognized.
     #[inline]
     pub fn tree_pseudo_element(name: &str, args: Box<[Atom]>) -> Option<Self> {
-        use std::ascii::AsciiExt;
+        #[allow(unused_imports)] use std::ascii::AsciiExt;
         debug_assert!(name.starts_with("-moz-tree-"));
         let tree_part = &name[10..];
         % for pseudo in TREE_PSEUDOS:
             if tree_part.eq_ignore_ascii_case("${pseudo.value[11:]}") {
                 return Some(${pseudo_element_variant(pseudo, "args")});
             }
         % endfor
         None
--- a/servo/components/style/gecko_string_cache/mod.rs
+++ b/servo/components/style/gecko_string_cache/mod.rs
@@ -8,17 +8,17 @@
 
 use gecko_bindings::bindings::Gecko_AddRefAtom;
 use gecko_bindings::bindings::Gecko_Atomize;
 use gecko_bindings::bindings::Gecko_Atomize16;
 use gecko_bindings::bindings::Gecko_ReleaseAtom;
 use gecko_bindings::structs::{nsAtom, nsAtom_AtomKind, nsStaticAtom};
 use nsstring::{nsAString, nsStr};
 use precomputed_hash::PrecomputedHash;
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::borrow::{Cow, Borrow};
 use std::char::{self, DecodeUtf16};
 use std::fmt::{self, Write};
 use std::hash::{Hash, Hasher};
 use std::iter::Cloned;
 use std::mem;
 use std::ops::Deref;
 use std::slice;
--- a/servo/components/style/matching.rs
+++ b/servo/components/style/matching.rs
@@ -328,31 +328,28 @@ trait PrivateMatchMethods: TElement {
         }
     }
 
 
     /// Computes and applies non-redundant damage.
     fn accumulate_damage_for(
         &self,
         shared_context: &SharedStyleContext,
-        skip_applying_damage: bool,
         damage: &mut RestyleDamage,
         old_values: &ComputedValues,
         new_values: &ComputedValues,
         pseudo: Option<&PseudoElement>,
     ) -> ChildCascadeRequirement {
         debug!("accumulate_damage_for: {:?}", self);
         debug_assert!(!shared_context.traversal_flags.contains(TraversalFlags::Forgetful));
 
         let difference =
             self.compute_style_difference(old_values, new_values, pseudo);
 
-        if !skip_applying_damage {
-            *damage |= difference.damage;
-        }
+        *damage |= difference.damage;
 
         debug!(" > style difference: {:?}", difference);
 
         // We need to cascade the children in order to ensure the correct
         // propagation of inherited computed value flags.
         if old_values.flags.inherited() != new_values.flags.inherited() {
             debug!(" > flags changed: {:?} != {:?}", old_values.flags, new_values.flags);
             return ChildCascadeRequirement::MustCascadeChildren;
@@ -585,17 +582,16 @@ pub trait MatchMethods : TElement {
             Some(s) => s,
             None => return ChildCascadeRequirement::MustCascadeChildren,
         };
 
         cascade_requirement = cmp::max(
             cascade_requirement,
             self.accumulate_damage_for(
                 context.shared,
-                data.skip_applying_damage(),
                 &mut data.damage,
                 &old_primary_style,
                 new_primary_style,
                 None,
             )
         );
 
         if data.styles.pseudos.is_empty() && old_styles.pseudos.is_empty() {
@@ -607,17 +603,16 @@ pub trait MatchMethods : TElement {
             old_styles.pseudos.as_array().iter().zip(
             data.styles.pseudos.as_array().iter());
 
         for (i, (old, new)) in pseudo_styles.enumerate() {
             match (old, new) {
                 (&Some(ref old), &Some(ref new)) => {
                     self.accumulate_damage_for(
                         context.shared,
-                        data.skip_applying_damage(),
                         &mut data.damage,
                         old,
                         new,
                         Some(&PseudoElement::from_eager_index(i)),
                     );
                 }
                 (&None, &None) => {},
                 _ => {
--- a/servo/components/style/properties/longhand/font.mako.rs
+++ b/servo/components/style/properties/longhand/font.mako.rs
@@ -1572,17 +1572,17 @@ https://drafts.csswg.org/css-fonts-4/#lo
         SpecifiedValue::Normal
     }
 
     impl ToComputedValue for SpecifiedValue {
         type ComputedValue = computed_value::T;
 
         #[inline]
         fn to_computed_value(&self, _context: &Context) -> computed_value::T {
-            use std::ascii::AsciiExt;
+            #[allow(unused_imports)] use std::ascii::AsciiExt;
             match *self {
                 SpecifiedValue::Normal => computed_value::T(0),
                 SpecifiedValue::Override(ref lang) => {
                     if lang.is_empty() || lang.len() > 4 || !lang.is_ascii() {
                         return computed_value::T(0)
                     }
                     let mut computed_lang = lang.clone();
                     while computed_lang.len() < 4 {
--- a/servo/components/style/properties/longhand/pointing.mako.rs
+++ b/servo/components/style/properties/longhand/pointing.mako.rs
@@ -83,17 +83,17 @@
             images: vec![],
             keyword: computed_value::Keyword::Auto
         }
     }
 
     impl Parse for computed_value::Keyword {
         fn parse<'i, 't>(_context: &ParserContext, input: &mut Parser<'i, 't>)
                          -> Result<computed_value::Keyword, ParseError<'i>> {
-            use std::ascii::AsciiExt;
+            #[allow(unused_imports)] use std::ascii::AsciiExt;
             use style_traits::cursor::Cursor;
             let location = input.current_source_location();
             let ident = input.expect_ident()?;
             if ident.eq_ignore_ascii_case("auto") {
                 Ok(computed_value::Keyword::Auto)
             } else {
                 Cursor::from_css_keyword(&ident)
                     .map(computed_value::Keyword::Cursor)
--- a/servo/components/style/str.rs
+++ b/servo/components/style/str.rs
@@ -2,17 +2,17 @@
  * 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/. */
 
 //! String utils for attributes and similar stuff.
 
 #![deny(missing_docs)]
 
 use num_traits::ToPrimitive;
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::borrow::Cow;
 use std::convert::AsRef;
 use std::iter::{Filter, Peekable};
 use std::str::Split;
 
 /// A static slice of characters.
 pub type StaticCharVec = &'static [char];
 
--- a/servo/components/style/stylesheets/viewport_rule.rs
+++ b/servo/components/style/stylesheets/viewport_rule.rs
@@ -15,17 +15,17 @@ use error_reporting::{ContextualParseErr
 use euclid::TypedSize2D;
 use font_metrics::get_metrics_provider_for_product;
 use media_queries::Device;
 use parser::{ParserContext, ParserErrorContext};
 use properties::StyleBuilder;
 use rule_cache::RuleCacheConditions;
 use selectors::parser::SelectorParseErrorKind;
 use shared_lock::{SharedRwLockReadGuard, StylesheetGuards, ToCssWithGuard};
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::borrow::Cow;
 use std::cell::RefCell;
 use std::fmt;
 use std::iter::Enumerate;
 use std::str::Chars;
 use style_traits::{PinchZoomFactor, ToCss, ParseError, StyleParseErrorKind};
 use style_traits::viewport::{Orientation, UserZoom, ViewportConstraints, Zoom};
 use stylesheets::{StylesheetInDocument, Origin};
--- a/servo/components/style/values/mod.rs
+++ b/servo/components/style/values/mod.rs
@@ -7,17 +7,17 @@
 //! [values]: https://drafts.csswg.org/css-values/
 
 #![deny(missing_docs)]
 
 use Atom;
 pub use cssparser::{RGBA, Token, Parser, serialize_identifier, CowRcStr, SourceLocation};
 use parser::{Parse, ParserContext};
 use selectors::parser::SelectorParseErrorKind;
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::fmt::{self, Debug};
 use std::hash;
 use style_traits::{ToCss, ParseError, StyleParseErrorKind};
 
 pub mod animated;
 pub mod computed;
 pub mod distance;
 pub mod generics;
--- a/servo/components/style/values/specified/align.rs
+++ b/servo/components/style/values/specified/align.rs
@@ -5,17 +5,17 @@
 //! Values for CSS Box Alignment properties
 //!
 //! https://drafts.csswg.org/css-align/
 
 use cssparser::Parser;
 use gecko_bindings::structs;
 use parser::{Parse, ParserContext};
 use selectors::parser::SelectorParseErrorKind;
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::fmt;
 use style_traits::{ToCss, ParseError, StyleParseErrorKind};
 
 bitflags! {
     /// Constants shared by multiple CSS Box Alignment properties
     ///
     /// These constants match Gecko's `NS_STYLE_ALIGN_*` constants.
     #[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
--- a/servo/components/style/values/specified/angle.rs
+++ b/servo/components/style/values/specified/angle.rs
@@ -1,17 +1,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/. */
 
 //! Specified angles.
 
 use cssparser::{Parser, Token};
 use parser::{ParserContext, Parse};
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::fmt;
 use style_traits::{ToCss, ParseError};
 use values::CSSFloat;
 use values::computed::{Context, ToComputedValue};
 use values::computed::angle::Angle as ComputedAngle;
 use values::specified::calc::CalcNode;
 
 /// A specified angle.
--- a/servo/components/style/values/specified/calc.rs
+++ b/servo/components/style/values/specified/calc.rs
@@ -3,17 +3,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 //! [Calc expressions][calc].
 //!
 //! [calc]: https://drafts.csswg.org/css-values/#calc-notation
 
 use cssparser::{Parser, Token};
 use parser::ParserContext;
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::fmt;
 use style_traits::{ToCss, ParseError, StyleParseErrorKind};
 use style_traits::values::specified::AllowedNumericType;
 use values::{CSSInteger, CSSFloat};
 use values::computed;
 use values::specified::{Angle, Time};
 use values::specified::length::{AbsoluteLength, FontRelativeLength, NoCalcLength};
 use values::specified::length::ViewportPercentageLength;
--- a/servo/components/style/values/specified/grid.rs
+++ b/servo/components/style/values/specified/grid.rs
@@ -2,17 +2,17 @@
  * 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/. */
 
 //! CSS handling for the computed value of
 //! [grids](https://drafts.csswg.org/css-grid/)
 
 use cssparser::{Parser, Token, ParseError as CssParseError};
 use parser::{Parse, ParserContext};
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::mem;
 use style_traits::{ParseError, StyleParseErrorKind};
 use values::{CSSFloat, CustomIdent};
 use values::computed::{self, Context, ToComputedValue};
 use values::generics::grid::{GridTemplateComponent, RepeatCount, TrackBreadth, TrackKeyword, TrackRepeat};
 use values::generics::grid::{LineNameList, TrackSize, TrackList, TrackListType, TrackListValue};
 use values::specified::{LengthOrPercentage, Integer};
 
--- a/servo/components/style/values/specified/length.rs
+++ b/servo/components/style/values/specified/length.rs
@@ -7,17 +7,17 @@
 //! [length]: https://drafts.csswg.org/css-values/#lengths
 
 use app_units::Au;
 use cssparser::{Parser, Token};
 use euclid::Size2D;
 use font_metrics::FontMetricsQueryResult;
 use parser::{Parse, ParserContext};
 use std::{cmp, fmt, mem};
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::ops::{Add, Mul};
 use style_traits::{ToCss, ParseError, StyleParseErrorKind};
 use style_traits::values::specified::AllowedNumericType;
 use stylesheets::CssRuleType;
 use super::{AllowQuirks, Number, ToComputedValue, Percentage};
 use values::{Auto, CSSFloat, Either, None_, Normal};
 use values::{ExtremumLength, serialize_dimension};
 use values::computed::{self, CSSPixelLength, Context};
--- a/servo/components/style/values/specified/mod.rs
+++ b/servo/components/style/values/specified/mod.rs
@@ -6,17 +6,17 @@
 //!
 //! TODO(emilio): Enhance docs.
 
 use Namespace;
 use context::QuirksMode;
 use cssparser::{Parser, Token, serialize_identifier};
 use parser::{ParserContext, Parse};
 use self::url::SpecifiedUrl;
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::f32;
 use std::fmt;
 use style_traits::{ToCss, ParseError, StyleParseErrorKind};
 use style_traits::values::specified::AllowedNumericType;
 use super::{Auto, CSSFloat, CSSInteger, Either, None_};
 use super::computed::{Context, ToComputedValue};
 use super::generics::{GreaterThanOrEqualToOne, NonNegative};
 use super::generics::grid::{GridLine as GenericGridLine, TrackBreadth as GenericTrackBreadth};
--- a/servo/components/style/values/specified/percentage.rs
+++ b/servo/components/style/values/specified/percentage.rs
@@ -1,17 +1,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/. */
 
 //! Specified percentages.
 
 use cssparser::{Parser, Token};
 use parser::{Parse, ParserContext};
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::fmt;
 use style_traits::{ParseError, ToCss};
 use style_traits::values::specified::AllowedNumericType;
 use values::{CSSFloat, serialize_percentage};
 use values::computed::{Context, ToComputedValue};
 use values::computed::percentage::Percentage as ComputedPercentage;
 use values::specified::calc::CalcNode;
 
--- a/servo/components/style/values/specified/text.rs
+++ b/servo/components/style/values/specified/text.rs
@@ -2,17 +2,17 @@
  * 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/. */
 
 //! Specified types for text properties.
 
 use cssparser::{Parser, Token};
 use parser::{Parse, ParserContext};
 use selectors::parser::SelectorParseErrorKind;
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use style_traits::ParseError;
 use values::computed::{Context, ToComputedValue};
 use values::computed::text::LineHeight as ComputedLineHeight;
 use values::computed::text::TextOverflow as ComputedTextOverflow;
 use values::generics::text::InitialLetter as GenericInitialLetter;
 use values::generics::text::LineHeight as GenericLineHeight;
 use values::generics::text::Spacing;
 use values::specified::{AllowQuirks, Integer, NonNegativeNumber, Number};
--- a/servo/components/style/values/specified/time.rs
+++ b/servo/components/style/values/specified/time.rs
@@ -1,17 +1,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/. */
 
 //! Specified time values.
 
 use cssparser::{Parser, Token};
 use parser::{ParserContext, Parse};
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::fmt;
 use style_traits::{ToCss, ParseError, StyleParseErrorKind};
 use style_traits::values::specified::AllowedNumericType;
 use values::CSSFloat;
 use values::computed::{Context, ToComputedValue};
 use values::computed::time::Time as ComputedTime;
 use values::specified::calc::CalcNode;
 
--- a/servo/components/style_traits/viewport.rs
+++ b/servo/components/style_traits/viewport.rs
@@ -2,17 +2,17 @@
  * 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/. */
 
 //! Helper types for the `@viewport` rule.
 
 use {CSSPixel, PinchZoomFactor, ParseError, ToCss};
 use cssparser::Parser;
 use euclid::TypedSize2D;
-use std::ascii::AsciiExt;
+#[allow(unused_imports)] use std::ascii::AsciiExt;
 use std::fmt;
 
 define_css_keyword_enum!(UserZoom:
                          "zoom" => Zoom,
                          "fixed" => Fixed);
 
 define_css_keyword_enum!(Orientation:
                          "auto" => Auto,
--- a/servo/python/servo/build_commands.py
+++ b/servo/python/servo/build_commands.py
@@ -260,17 +260,16 @@ class MachCommands(CommandBase):
             android_dir = self.android_build_dir(dev)
             openssl_dir = path.join(android_dir, "native", "openssl")
             if not path.exists(openssl_dir):
                 os.makedirs(openssl_dir)
             shutil.copy(path.join(self.android_support_dir(), "openssl.makefile"), openssl_dir)
             shutil.copy(path.join(self.android_support_dir(), "openssl.sh"), openssl_dir)
 
             # Check if the NDK version is 12
-            env["ANDROID_NDK_ROOT"] = env["ANDROID_NDK"]
             with open(path.join(env["ANDROID_NDK"], 'source.properties')) as ndk_properties:
                 lines = ndk_properties.readlines()
                 if lines[1].split(' = ')[1].split('.')[0] != '12':
                     print("Currently only support NDK 12.")
                     sys.exit(1)
 
             env["RUST_TARGET"] = target
             with cd(openssl_dir):
--- a/storage/mozStorageService.cpp
+++ b/storage/mozStorageService.cpp
@@ -226,36 +226,16 @@ Service::getSingleton()
   if (NS_FAILED(service->initialize())) {
     gService = nullptr;
     return nullptr;
   }
 
   return service.forget();
 }
 
-nsIXPConnect *Service::sXPConnect = nullptr;
-
-// static
-already_AddRefed<nsIXPConnect>
-Service::getXPConnect()
-{
-  NS_PRECONDITION(NS_IsMainThread(),
-                  "Must only get XPConnect on the main thread!");
-  NS_PRECONDITION(gService,
-                  "Can not get XPConnect without an instance of our service!");
-
-  // If we've been shutdown, sXPConnect will be null.  To prevent leaks, we do
-  // not cache the service after this point.
-  nsCOMPtr<nsIXPConnect> xpc(sXPConnect);
-  if (!xpc)
-    xpc = do_GetService(nsIXPConnect::GetCID());
-  NS_ASSERTION(xpc, "Could not get XPConnect!");
-  return xpc.forget();
-}
-
 int32_t Service::sSynchronousPref;
 
 // static
 int32_t
 Service::getSynchronousPref()
 {
   return sSynchronousPref;
 }
@@ -274,18 +254,16 @@ Service::~Service()
 {
   mozilla::UnregisterWeakMemoryReporter(this);
   mozilla::UnregisterStorageSQLiteDistinguishedAmount();
 
   int rc = sqlite3_vfs_unregister(mSqliteVFS);
   if (rc != SQLITE_OK)
     NS_WARNING("Failed to unregister sqlite vfs wrapper.");
 
-  shutdown(); // To release sXPConnect.
-
   gService = nullptr;
   delete mSqliteVFS;
   mSqliteVFS = nullptr;
 }
 
 void
 Service::registerConnection(Connection *aConnection)
 {
@@ -390,28 +368,21 @@ Service::minimizeMemory()
         NewRunnableMethod<const nsCString>(
           "Connection::ExecuteSimpleSQL",
           conn, &Connection::ExecuteSimpleSQL, shrinkPragma);
       Unused << conn->threadOpenedOn->Dispatch(event, NS_DISPATCH_NORMAL);
     }
   }
 }
 
-void
-Service::shutdown()
-{
-  NS_IF_RELEASE(sXPConnect);
-}
-
 sqlite3_vfs *ConstructTelemetryVFS();
 const char *GetVFSName();
 
 static const char* sObserverTopics[] = {
   "memory-pressure",
-  "xpcom-shutdown",
   "xpcom-shutdown-threads"
 };
 
 nsresult
 Service::initialize()
 {
   MOZ_ASSERT(NS_IsMainThread(), "Must be initialized on the main thread");
 
@@ -423,32 +394,26 @@ Service::initialize()
   if (mSqliteVFS) {
     rc = sqlite3_vfs_register(mSqliteVFS, 0);
     if (rc != SQLITE_OK)
       return convertResultCode(rc);
   } else {
     NS_WARNING("Failed to register telemetry VFS");
   }
 
-  // Register for xpcom-shutdown so we can cleanup after ourselves.  The
-  // observer service can only be used on the main thread.
   nsCOMPtr<nsIObserverService> os = mozilla::services::GetObserverService();
   NS_ENSURE_TRUE(os, NS_ERROR_FAILURE);
 
   for (size_t i = 0; i < ArrayLength(sObserverTopics); ++i) {
     nsresult rv = os->AddObserver(this, sObserverTopics[i], false);
     if (NS_WARN_IF(NS_FAILED(rv))) {
       return rv;
     }
   }
 
-  // We cache XPConnect for our language helpers.  XPConnect can only be
-  // used on the main thread.
-  (void)CallGetService(nsIXPConnect::GetCID(), &sXPConnect);
-
   // We need to obtain the toolkit.storage.synchronous preferences on the main
   // thread because the preference service can only be accessed there.  This
   // is cached in the service for all future Open[Unshared]Database calls.
   sSynchronousPref =
     Preferences::GetInt(PREF_TS_SYNCHRONOUS, PREF_TS_SYNCHRONOUS_DEFAULT);
 
   // We need to obtain the toolkit.storage.pageSize preferences on the main
   // thread because the preference service can only be accessed there.  This
@@ -799,18 +764,16 @@ Service::BackupDatabaseFile(nsIFile *aDB
 ////////////////////////////////////////////////////////////////////////////////
 //// nsIObserver
 
 NS_IMETHODIMP
 Service::Observe(nsISupports *, const char *aTopic, const char16_t *)
 {
   if (strcmp(aTopic, "memory-pressure") == 0) {
     minimizeMemory();
-  } else if (strcmp(aTopic, "xpcom-shutdown") == 0) {
-    shutdown();
   } else if (strcmp(aTopic, "xpcom-shutdown-threads") == 0) {
     // The Service is kept alive by our strong observer references and
     // references held by Connection instances.  Since we're about to remove the
     // former and then wait for the latter ones to go away, it behooves us to
     // hold a strong reference to ourselves so our calls to getConnections() do
     // not happen on a deleted object.
     RefPtr<Service> kungFuDeathGrip = this;
 
--- a/storage/mozStorageService.h
+++ b/storage/mozStorageService.h
@@ -13,17 +13,16 @@
 #include "nsIMemoryReporter.h"
 #include "nsIObserver.h"
 #include "nsTArray.h"
 #include "mozilla/Mutex.h"
 
 #include "mozIStorageService.h"
 
 class nsIMemoryReporter;
-class nsIXPConnect;
 struct sqlite3_vfs;
 
 namespace mozilla {
 namespace storage {
 
 class Connection;
 class Service : public mozIStorageService
               , public nsIObserver
@@ -55,22 +54,16 @@ public:
   static already_AddRefed<Service> getSingleton();
 
   NS_DECL_THREADSAFE_ISUPPORTS
   NS_DECL_MOZISTORAGESERVICE
   NS_DECL_NSIOBSERVER
   NS_DECL_NSIMEMORYREPORTER
 
   /**
-   * Obtains an already AddRefed pointer to XPConnect.  This is used by
-   * language helpers.
-   */
-  static already_AddRefed<nsIXPConnect> getXPConnect();
-
-  /**
    * Obtains the cached data for the toolkit.storage.synchronous preference.
    */
   static int32_t getSynchronousPref();
 
   /**
    * Obtains the default page size for this platform. The default value is
    * specified in the SQLite makefile (SQLITE_DEFAULT_PAGE_SIZE) but it may be
    * overriden with the PREF_TS_PAGESIZE hidden preference.
@@ -152,21 +145,16 @@ private:
 
   /**
    * Frees as much heap memory as possible from all of the known open
    * connections.
    */
   void minimizeMemory();
 
   /**
-   * Shuts down the storage service, freeing all of the acquired resources.
-   */
-  void shutdown();
-
-  /**
    * Lazily creates and returns a collation created from the application's
    * locale that all statements of all Connections of this Service may use.
    * Since the collation's lifetime is that of the Service and no statement may
    * execute outside the lifetime of the Service, this method returns a raw
    * pointer.
    */
   nsICollation *getLocaleCollation();
 
@@ -180,18 +168,16 @@ private:
   nsCOMPtr<nsICollation> mLocaleCollation;
 
   nsCOMPtr<nsIFile> mProfileStorageFile;
 
   nsCOMPtr<nsIMemoryReporter> mStorageSQLiteReporter;
 
   static Service *gService;
 
-  static nsIXPConnect *sXPConnect;
-
   static int32_t sSynchronousPref;
   static int32_t sDefaultPageSize;
 };
 
 } // namespace storage
 } // namespace mozilla
 
 #endif /* MOZSTORAGESERVICE_H */
--- a/storage/mozStorageStatementJSHelper.cpp
+++ b/storage/mozStorageStatementJSHelper.cpp
@@ -16,29 +16,31 @@
 
 #include "mozStorageStatementRow.h"
 #include "mozStorageStatementParams.h"
 
 #include "jsapi.h"
 
 #include "xpc_make_class.h"
 
+#include "mozilla/Services.h"
+
 namespace mozilla {
 namespace storage {
 
 ////////////////////////////////////////////////////////////////////////////////
 //// Global Functions
 
 static
 bool
 stepFunc(JSContext *aCtx,
          uint32_t,
          JS::Value *_vp)
 {
-  nsCOMPtr<nsIXPConnect> xpc(Service::getXPConnect());
+  nsCOMPtr<nsIXPConnect> xpc(mozilla::services::GetXPConnect());
   nsCOMPtr<nsIXPConnectWrappedNative> wrapper;
   JSObject *obj = JS_THIS_OBJECT(aCtx, _vp);
   if (!obj) {
     return false;
   }
 
   nsresult rv =
     xpc->GetWrappedNativeOfJSObject(aCtx, obj, getter_AddRefs(wrapper));
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -384302,16 +384302,22 @@
   },
   "wdspec": {
    "webdriver/tests/actions/key.py": [
     [
      "/webdriver/tests/actions/key.py",
      {}
     ]
    ],
+   "webdriver/tests/actions/key_shortcuts.py": [
+    [
+     "/webdriver/tests/actions/key_shortcuts.py",
+     {}
+    ]
+   ],
    "webdriver/tests/actions/modifier_click.py": [
     [
      "/webdriver/tests/actions/modifier_click.py",
      {
       "timeout": "long"
      }
     ]
    ],
@@ -541906,17 +541912,17 @@
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "html/browsers/origin/cross-origin-objects/cross-origin-objects-on-new-window.html": [
    "604c6ee2bd78187a600dd28e03b60caf89580cfe",
    "testharness"
   ],
   "html/browsers/origin/cross-origin-objects/cross-origin-objects.html": [
-   "9202ebf4d640ffccec49451bae23526c24a1053b",
+   "ce27e8e729f434ce3e908a49a1ffd733bcdcd06a",
    "testharness"
   ],
   "html/browsers/origin/cross-origin-objects/frame.html": [
    "7f982fe347ac7fbc14e853d14a2535685a970395",
    "support"
   ],
   "html/browsers/origin/cross-origin-objects/win-documentdomain.sub.html": [
    "37d2be417bbc3b8473c2d4bfaa3b7a9973140ce9",
@@ -586525,16 +586531,20 @@
   "webdriver/tests/actions/conftest.py": [
    "ebdbe326fd2fc53a3522b846505808496407b5b8",
    "support"
   ],
   "webdriver/tests/actions/key.py": [
    "69542dc107d881bf18dfff3203bfd7a9ec31b4ad",
    "wdspec"
   ],
+  "webdriver/tests/actions/key_shortcuts.py": [
+   "dbe27dd0b1625169fc8cc2055f8fb49d5a4a78d2",
+   "wdspec"
+  ],
   "webdriver/tests/actions/modifier_click.py": [
    "2ec22f44973e6da3b9506ad7cc9fd0949f3ef8b5",
    "wdspec"
   ],
   "webdriver/tests/actions/mouse.py": [
    "d7af66e45c8e306b4258b92c54ed86073fd21c8d",
    "wdspec"
   ],
@@ -586546,17 +586556,17 @@
    "3b10143dea60567f30b4ab6c544e005d02f31fc3",
    "wdspec"
   ],
   "webdriver/tests/actions/support/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/actions/support/keys.py": [
-   "636991372c21e52b623ed4ada9dfb675dd7f7e14",
+   "61fc98ac2abeeb82486e6689c9cc16d0aa444b69",
    "support"
   ],
   "webdriver/tests/actions/support/refine.py": [
    "0d244bffe67ef57be68aad99f1cbc7440ff80e27",
    "support"
   ],
   "webdriver/tests/actions/support/test_actions_wdspec.html": [
    "94b6f474bb4417cf2c06cb5fc6042c01bde98aa2",
@@ -596618,17 +596628,17 @@
    "f95cceffe7485aac7b53d3f891ad87d50ccc8b1d",
    "testharness"
   ],
   "webrtc/RTCConfiguration-rtcpMuxPolicy.html": [
    "a9beda60053916185106aedac98014123d6f7105",
    "testharness"
   ],
   "webrtc/RTCDTMFSender-helper.js": [
-   "54456b1c74d55552fdad0405f55dcd728205b561",
+   "0c2e8862deffeec71ac925642647bb9ee4ad70ff",
    "support"
   ],
   "webrtc/RTCDTMFSender-insertDTMF.https.html": [
    "50ef787a77512dc7eea7731b9766fda4d1456694",
    "testharness"
   ],
   "webrtc/RTCDTMFSender-ontonechange-long.https.html": [
    "d89602fd655bf032cadfc538291ccea858eb2446",
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/actions/key_shortcuts.py
@@ -0,0 +1,49 @@
+from tests.actions.support.keys import Keys, MODIFIER_KEY
+from tests.actions.support.refine import get_keys
+
+
+def test_mod_a_and_backspace_deletes_all_text(session, key_reporter, key_chain):
+    key_chain.send_keys("abc d") \
+             .key_down(MODIFIER_KEY) \
+             .key_down("a") \
+             .key_up(MODIFIER_KEY) \
+             .key_up("a") \
+             .key_down(Keys.BACKSPACE) \
+             .perform()
+    assert get_keys(key_reporter) == ""
+
+
+def test_mod_a_mod_c_right_mod_v_pastes_text(session, key_reporter, key_chain):
+    initial = "abc d"
+    key_chain.send_keys(initial) \
+             .key_down(MODIFIER_KEY) \
+             .key_down("a") \
+             .key_up(MODIFIER_KEY) \
+             .key_up("a") \
+             .key_down(MODIFIER_KEY) \
+             .key_down("c") \
+             .key_up(MODIFIER_KEY) \
+             .key_up("c") \
+             .send_keys([Keys.RIGHT]) \
+             .key_down(MODIFIER_KEY) \
+             .key_down("v") \
+             .key_up(MODIFIER_KEY) \
+             .key_up("v") \
+             .perform()
+    assert get_keys(key_reporter) == initial * 2
+
+
+def test_mod_a_mod_x_deletes_all_text(session, key_reporter, key_chain):
+    key_chain.send_keys("abc d") \
+             .key_down(MODIFIER_KEY) \
+             .key_down("a") \
+             .key_up(MODIFIER_KEY) \
+             .key_up("a") \
+             .key_down(MODIFIER_KEY) \
+             .key_down("x") \
+             .key_up(MODIFIER_KEY) \
+             .key_up("x") \
+             .perform()
+    assert get_keys(key_reporter) == ""
+
+
--- a/testing/web-platform/tests/webdriver/tests/actions/support/keys.py
+++ b/testing/web-platform/tests/webdriver/tests/actions/support/keys.py
@@ -15,16 +15,17 @@
 # specific language governing permissions and limitations
 # under the License.
 
 """
 The Keys implementation.
 """
 
 from inspect import getmembers
+import sys
 
 
 class Keys(object):
     """
     Set of special keys codes.
 
     See also https://w3c.github.io/webdriver/webdriver-spec.html#h-keyboard-actions
     """
@@ -735,8 +736,13 @@ ALL_EVENTS = {
         "ctrl": False,
         "key": "ZenkakuHankaku",
         "location": 0,
         "meta": False,
         "shift": False,
         "value": u"\ue040",
     }
 }
+
+if sys.platform == 'darwin':
+    MODIFIER_KEY = Keys.META
+else:
+    MODIFIER_KEY = Keys.CONTROL
--- a/toolkit/components/places/UnifiedComplete.js
+++ b/toolkit/components/places/UnifiedComplete.js
@@ -77,29 +77,32 @@ const FRECENCY_DEFAULT = 1000;
 
 // Extensions are allowed to add suggestions if they have registered a keyword
 // with the omnibox API. This is the maximum number of suggestions an extension
 // is allowed to add for a given search string.
 // This value includes the heuristic result.
 const MAXIMUM_ALLOWED_EXTENSION_MATCHES = 6;
 
 // After this time, we'll give up waiting for the extension to return matches.
-const MAXIMUM_ALLOWED_EXTENSION_TIME_MS = 5000;
+const MAXIMUM_ALLOWED_EXTENSION_TIME_MS = 3000;
 
 // A regex that matches "single word" hostnames for whitelisting purposes.
 // The hostname will already have been checked for general validity, so we
 // don't need to be exhaustive here, so allow dashes anywhere.
 const REGEXP_SINGLEWORD_HOST = new RegExp("^[a-z0-9-]+$", "i");
 
 // Regex used to match userContextId.
 const REGEXP_USER_CONTEXT_ID = /(?:^| )user-context-id:(\d+)/;
 
 // Regex used to match one or more whitespace.
 const REGEXP_SPACES = /\s+/;
 
+// The result is notified on a delay, to avoid rebuilding the panel at every match.
+const NOTIFYRESULT_DELAY_MS = 16;
+
 // Sqlite result row index constants.
 const QUERYINDEX_QUERYTYPE     = 0;
 const QUERYINDEX_URL           = 1;
 const QUERYINDEX_TITLE         = 2;
 const QUERYINDEX_BOOKMARKED    = 3;
 const QUERYINDEX_BOOKMARKTITLE = 4;
 const QUERYINDEX_TAGS          = 5;
 const QUERYINDEX_VISITCOUNT    = 6;
@@ -325,16 +328,17 @@ XPCOMUtils.defineLazyModuleGetters(this,
 
 XPCOMUtils.defineLazyServiceGetter(this, "textURIService",
                                    "@mozilla.org/intl/texttosuburi;1",
                                    "nsITextToSubURI");
 
 function setTimeout(callback, ms) {
   let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
   timer.initWithCallback(callback, ms, timer.TYPE_ONE_SHOT);
+  return timer;
 }
 
 function convertBucketsCharPrefToArray(str) {
   return str.split(",")
             .map(v => {
               let bucket = v.split(":");
               return [ bucket[0].trim().toLowerCase(), Number(bucket[1]) ];
             });
@@ -987,16 +991,19 @@ Search.prototype = {
    * Stop this search.
    * After invoking this method, we won't run any more searches or heuristics,
    * and no new matches may be added to the current result.
    */
   stop() {
     // Avoid multiple calls or re-entrance.
     if (!this.pending)
       return;
+    if (this._notifyTimer)
+      this._notifyTimer.cancel();
+    this._notifyDelaysCount = 0;
     if (this._sleepTimer)
       this._sleepTimer.cancel();
     if (this._sleepResolve) {
       this._sleepResolve();
       this._sleepResolve = null;
     }
     if (this._searchSuggestionController) {
       this._searchSuggestionController.stop();
@@ -1122,17 +1129,16 @@ Search.prototype = {
         searchSuggestionsCompletePromise = this._matchSearchSuggestions(searchString);
         if (this.hasBehavior("restrict")) {
           // Wait for the suggestions to be added.
           await searchSuggestionsCompletePromise;
           this._cleanUpNonCurrentMatches(MATCHTYPE.SUGGESTION);
           // We're done if we're restricting to search suggestions.
           // Notify the result completion then stop the search.
           this._autocompleteSearch.finishSearch(true);
-          this.stop();
           return;
         }
       }
     }
     // In any case, clear previous suggestions.
     searchSuggestionsCompletePromise.then(() => {
       this._cleanUpNonCurrentMatches(MATCHTYPE.SUGGESTION);
     });
@@ -1662,19 +1668,18 @@ Search.prototype = {
     // Remove previous search matches sooner than the maximum timeout, otherwise
     // matches may appear stale for a long time.
     // This is necessary because WebExtensions don't have a method to notify
     // that they are done providing results, so they could be pending forever.
     setTimeout(() => this._cleanUpNonCurrentMatches(MATCHTYPE.EXTENSION), 100);
 
     // Since the extension has no way to signale when it's done pushing
     // results, we add a timeout racing with the addition.
-    let timeoutPromise = new Promise((resolve, reject) => {
-      setTimeout(() => reject(new Error("timeout waiting for the extension to add its results to the location bar")),
-                 MAXIMUM_ALLOWED_EXTENSION_TIME_MS);
+    let timeoutPromise = new Promise(resolve => {
+      setTimeout(resolve, MAXIMUM_ALLOWED_EXTENSION_TIME_MS);
     });
     return Promise.race([timeoutPromise, promise]).catch(Cu.reportError);
   },
 
   async _matchRemoteTabs() {
     let matches = await PlacesRemoteTabsAutocompleteProvider.getMatches(this._originalSearchString);
     for (let {url, title, icon, deviceName} of matches) {
       // It's rare that Sync supplies the icon for the page (but if it does, it
@@ -1904,17 +1909,17 @@ Search.prototype = {
                                match.finalCompleteValue);
     this._currentMatchCount++;
     this._counts[match.type]++;
 
     if (this._currentMatchCount == 1)
       TelemetryStopwatch.finish(TELEMETRY_1ST_RESULT, this);
     if (this._currentMatchCount == 6)
       TelemetryStopwatch.finish(TELEMETRY_6_FIRST_RESULTS, this);
-    this.notifyResults(true);
+    this.notifyResult(true, match.type == MATCHTYPE.HEURISTIC);
   },
 
   _getInsertIndexForMatch(match) {
     let index = 0;
     // The buckets change depending on the context, that is currently decided by
     // the first added match (the heuristic one).
     if (!this._buckets) {
       // Convert the buckets to readable objects with a count property.
@@ -2004,17 +2009,17 @@ Search.prototype = {
         while (bucket.count > bucket.insertIndex) {
           this._result.removeMatchAt(index);
           changed = true;
           bucket.count--;
         }
       }
     }
     if (changed && notify) {
-      this.notifyResults(true);
+      this.notifyResult(true);
     }
   },
 
   /**
    * If in restrict mode, cleanups non current matches for all the empty types.
    */
   cleanUpRestrictNonCurrentMatches() {
     if (this.hasBehavior("restrict") && this._previousSearchMatchTypes.length > 0) {
@@ -2359,34 +2364,57 @@ Search.prototype = {
       query_type: QUERYTYPE_AUTOFILL_URL,
       searchString,
       revHost
     });
 
     return query;
   },
 
- /**
-   * Notifies the listener about results.
+  // The result is notified to the search listener on a timer, to chunk multiple
+  // match updates together and avoid rebuilding the popup at every new match.
+  _notifyTimer: null,
+
+  /**
+   * Notifies the current result to the listener.
    *
    * @param searchOngoing
-   *        Indicates whether the search is ongoing.
+   *        Indicates whether the search result should be marked as ongoing.
+   * @param skipDelay
+   *        Whether to notify immediately.
    */
-  notifyResults(searchOngoing) {
-    let result = this._result;
-    let resultCode = this._currentMatchCount ? "RESULT_SUCCESS" : "RESULT_NOMATCH";
-    if (searchOngoing) {
-      resultCode += "_ONGOING";
+  _notifyDelaysCount: 0,
+  notifyResult(searchOngoing, skipDelay = false) {
+    let notify = () => {
+      this._notifyDelaysCount = 0;
+      let resultCode = this._currentMatchCount ? "RESULT_SUCCESS" : "RESULT_NOMATCH";
+      if (searchOngoing) {
+        resultCode += "_ONGOING";
+      }
+      let result = this._result;
+      result.setSearchResult(Ci.nsIAutoCompleteResult[resultCode]);
+      this._listener.onSearchResult(this._autocompleteSearch, result);
+      if (!searchOngoing) {
+        // Break possible cycles.
+        this._listener = null;
+        this._autocompleteSearch = null;
+        this.stop();
+      }
+    };
+    if (this._notifyTimer) {
+      this._notifyTimer.cancel();
     }
-    result.setSearchResult(Ci.nsIAutoCompleteResult[resultCode]);
-    this._listener.onSearchResult(this._autocompleteSearch, result);
-    if (!searchOngoing) {
-      // Break possible cycles.
-      this._listener = null;
-      this._autocompleteSearch = null;
+    // In the worst case, we may get evenly spaced matches that would end up
+    // delaying the UI by N_MATCHES * NOTIFYRESULT_DELAY_MS. Thus, we clamp the
+    // number of times we may delay matches.
+    if (skipDelay || this._notifyDelaysCount > 3) {
+      notify();
+    } else {
+      this._notifyDelaysCount++;
+      this._notifyTimer = setTimeout(notify, NOTIFYRESULT_DELAY_MS);
     }
   },
 };
 
 // UnifiedComplete class
 // component @mozilla.org/autocomplete/search;1?name=unifiedcomplete
 
 function UnifiedComplete() {
@@ -2574,32 +2602,31 @@ UnifiedComplete.prototype = {
     let search = this._currentSearch;
     if (!search)
       return;
     this._lastLowResultsSearchSuggestion = search._lastLowResultsSearchSuggestion;
 
     if (!notify || !search.pending)
       return;
 
-
     // If we are in restrict mode and we reused the previous search results,
     // it's possible we didn't go through all the cleanup methods due to early
     // bailouts. Thus we could still have nonmatching results to remove.
     search.cleanUpRestrictNonCurrentMatches();
 
     // There is a possible race condition here.
     // When a search completes it calls finishSearch that notifies results
     // here.  When the controller gets the last result it fires
     // onSearchComplete.
     // If onSearchComplete immediately starts a new search it will set a new
     // _currentSearch, and on return the execution will continue here, after
-    // notifyResults.
-    // Thus, ensure that notifyResults is the last call in this method,
+    // notifyResult.
+    // Thus, ensure that notifyResult is the last call in this method,
     // otherwise you might be touching the wrong search.
-    search.notifyResults(false);
+    search.notifyResult(false);
   },
 
   // nsIAutoCompleteSearchDescriptor
 
   get searchType() {
     return Ci.nsIAutoCompleteSearchDescriptor.SEARCH_TYPE_IMMEDIATE;
   },
 
--- a/toolkit/components/places/tests/bookmarks/test_395593.js
+++ b/toolkit/components/places/tests/bookmarks/test_395593.js
@@ -1,69 +1,76 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim:set ts=2 sw=2 sts=2 et: */
 /* 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/. */
 
 
-var bs = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
-         getService(Ci.nsINavBookmarksService);
-var hs = Cc["@mozilla.org/browser/nav-history-service;1"].
-         getService(Ci.nsINavHistoryService);
-
-function check_queries_results(aQueries, aOptions, aExpectedItemIds) {
-  var result = hs.executeQueries(aQueries, aQueries.length, aOptions);
+function check_queries_results(aQueries, aOptions, aExpectedBookmarks) {
+  var result = PlacesUtils.history.executeQueries(aQueries, aQueries.length, aOptions);
   var root = result.root;
   root.containerOpen = true;
 
   // Dump found nodes.
   for (let i = 0; i < root.childCount; i++) {
     dump("nodes[" + i + "]: " + root.getChild(0).title + "\n");
   }
 
-  do_check_eq(root.childCount, aExpectedItemIds.length);
+  do_check_eq(root.childCount, aExpectedBookmarks.length);
   for (let i = 0; i < root.childCount; i++) {
-    do_check_eq(root.getChild(i).itemId, aExpectedItemIds[i]);
+    do_check_eq(root.getChild(i).bookmarkGuid, aExpectedBookmarks[i].guid);
   }
 
   root.containerOpen = false;
 }
 
 // main
-function run_test() {
-  var id1 = bs.insertBookmark(bs.bookmarksMenuFolder, uri("http://foo.tld"),
-                              bs.DEFAULT_INDEX, "123 0");
-  var id2 = bs.insertBookmark(bs.bookmarksMenuFolder, uri("http://foo.tld"),
-                              bs.DEFAULT_INDEX, "456");
-  var id3 = bs.insertBookmark(bs.bookmarksMenuFolder, uri("http://foo.tld"),
-                              bs.DEFAULT_INDEX, "123 456");
-  var id4 = bs.insertBookmark(bs.bookmarksMenuFolder, uri("http://foo.tld"),
-                              bs.DEFAULT_INDEX, "789 456");
+add_task(async function run_test() {
+  let bookmarks = await PlacesUtils.bookmarks.insertTree({
+    guid: PlacesUtils.bookmarks.menuGuid,
+    children: [{
+      title: "123 0",
+      url: "http://foo.tld",
+    }, {
+      title: "456",
+      url: "http://foo.tld",
+    }, {
+      title: "123 456",
+      url: "http://foo.tld",
+    }, {
+      title: "789 456",
+      url: "http://foo.tld",
+    }]
+  });
 
   /**
    * All of the query objects are ORed together. Within a query, all the terms
    * are ANDed together. See nsINavHistory.idl.
    */
   var queries = [];
-  queries.push(hs.getNewQuery());
-  queries.push(hs.getNewQuery());
-  var options = hs.getNewQueryOptions();
+  queries.push(PlacesUtils.history.getNewQuery());
+  queries.push(PlacesUtils.history.getNewQuery());
+  var options = PlacesUtils.history.getNewQueryOptions();
   options.queryType = Ci.nsINavHistoryQueryOptions.QUERY_TYPE_BOOKMARKS;
 
   // Test 1
   dump("Test searching for 123 OR 789\n");
   queries[0].searchTerms = "123";
   queries[1].searchTerms = "789";
-  check_queries_results(queries, options, [id1, id3, id4]);
+  check_queries_results(queries, options, [
+    bookmarks[0],
+    bookmarks[2],
+    bookmarks[3]
+  ]);
 
   // Test 2
   dump("Test searching for 123 OR 456\n");
   queries[0].searchTerms = "123";
   queries[1].searchTerms = "456";
-  check_queries_results(queries, options, [id1, id2, id3, id4]);
+  check_queries_results(queries, options, bookmarks);
 
   // Test 3
   dump("Test searching for 00 OR 789\n");
   queries[0].searchTerms = "00";
   queries[1].searchTerms = "789";
-  check_queries_results(queries, options, [id4]);
-}
+  check_queries_results(queries, options, [bookmarks[3]]);
+});
--- a/toolkit/components/places/tests/bookmarks/test_448584.js
+++ b/toolkit/components/places/tests/bookmarks/test_448584.js
@@ -1,108 +1,89 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim:set ts=2 sw=2 sts=2 et: */
 /* 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/. */
 
-var tests = [];
-
 // Get database connection
 try {
   var mDBConn = PlacesUtils.history.QueryInterface(Ci.nsPIPlacesDatabase)
                                    .DBConnection;
 } catch (ex) {
   do_throw("Could not get database connection\n");
 }
 
 /*
   This test is:
     - don't try to add invalid uri nodes to a JSON backup
 */
 
-var invalidURITest = {
-  _itemTitle: "invalid uri",
-  _itemUrl: "http://test.mozilla.org/",
-  _itemId: null,
+const ITEM_TITLE = "invalid uri";
+const ITEM_URL = "http://test.mozilla.org";
 
-  populate() {
-    // add a valid bookmark
-    PlacesUtils.bookmarks.insertBookmark(PlacesUtils.toolbarFolderId,
-                                         PlacesUtils._uri(this._itemUrl),
-                                         PlacesUtils.bookmarks.DEFAULT_INDEX,
-                                         this._itemTitle);
-    // this bookmark will go corrupt
-    this._itemId =
-      PlacesUtils.bookmarks.insertBookmark(PlacesUtils.toolbarFolderId,
-                                           PlacesUtils._uri(this._itemUrl),
-                                           PlacesUtils.bookmarks.DEFAULT_INDEX,
-                                           this._itemTitle);
-  },
+function validateResults(expectedValidItemsCount) {
+  var query = PlacesUtils.history.getNewQuery();
+  query.setFolders([PlacesUtils.bookmarks.toolbarFolder], 1);
+  var options = PlacesUtils.history.getNewQueryOptions();
+  var result = PlacesUtils.history.executeQuery(query, options);
 
-  clean() {
-    PlacesUtils.bookmarks.removeItem(this._itemId);
-  },
+  var toolbar = result.root;
+  toolbar.containerOpen = true;
 
-  validate(aExpectValidItemsCount) {
-    var query = PlacesUtils.history.getNewQuery();
-    query.setFolders([PlacesUtils.bookmarks.toolbarFolder], 1);
-    var options = PlacesUtils.history.getNewQueryOptions();
-    var result = PlacesUtils.history.executeQuery(query, options);
-
-    var toolbar = result.root;
-    toolbar.containerOpen = true;
+  // test for our bookmark
+  do_check_eq(toolbar.childCount, expectedValidItemsCount);
+  for (var i = 0; i < toolbar.childCount; i++) {
+    var folderNode = toolbar.getChild(0);
+    do_check_eq(folderNode.type, folderNode.RESULT_TYPE_URI);
+    do_check_eq(folderNode.title, ITEM_TITLE);
+  }
 
-    // test for our bookmark
-    do_check_eq(toolbar.childCount, aExpectValidItemsCount);
-    for (var i = 0; i < toolbar.childCount; i++) {
-      var folderNode = toolbar.getChild(0);
-      do_check_eq(folderNode.type, folderNode.RESULT_TYPE_URI);
-      do_check_eq(folderNode.title, this._itemTitle);
-    }
-
-    // clean up
-    toolbar.containerOpen = false;
-  }
-};
-tests.push(invalidURITest);
+  // clean up
+  toolbar.containerOpen = false;
+}
 
 add_task(async function() {
   // make json file
   let jsonFile = OS.Path.join(OS.Constants.Path.profileDir, "bookmarks.json");
 
   // populate db
-  tests.forEach(function(aTest) {
-    aTest.populate();
-    // sanity
-    aTest.validate(2);
-    // Something in the code went wrong and we finish up losing the place, so
-    // the bookmark uri becomes null.
-    var sql = "UPDATE moz_bookmarks SET fk = 1337 WHERE id = ?1";
-    var stmt = mDBConn.createStatement(sql);
-    stmt.bindByIndex(0, aTest._itemId);
-    try {
-      stmt.execute();
-    } finally {
-      stmt.finalize();
-    }
+  // add a valid bookmark
+  await PlacesUtils.bookmarks.insert({
+    parentGuid: PlacesUtils.bookmarks.toolbarGuid,
+    title: ITEM_TITLE,
+    url: ITEM_URL,
+  });
+
+  let badBookmark = await PlacesUtils.bookmarks.insert({
+    parentGuid: PlacesUtils.bookmarks.toolbarGuid,
+    title: ITEM_TITLE,
+    url: ITEM_URL,
   });
+  // sanity
+  validateResults(2);
+  // Something in the code went wrong and we finish up losing the place, so
+  // the bookmark uri becomes null.
+  var sql = "UPDATE moz_bookmarks SET fk = 1337 WHERE guid = ?1";
+  var stmt = mDBConn.createStatement(sql);
+  stmt.bindByIndex(0, badBookmark.guid);
+  try {
+    stmt.execute();
+  } finally {
+    stmt.finalize();
+  }
 
   await BookmarkJSONUtils.exportToFile(jsonFile);
 
   // clean
-  tests.forEach(function(aTest) {
-    aTest.clean();
-  });
+  await PlacesUtils.bookmarks.remove(badBookmark);
 
   // restore json file
   try {
     await BookmarkJSONUtils.importFromFile(jsonFile, true);
   } catch (ex) { do_throw("couldn't import the exported file: " + ex); }
 
   // validate
-  tests.forEach(function(aTest) {
-    aTest.validate(1);
-  });
+  validateResults(1);
 
   // clean up
   await OS.File.remove(jsonFile);
 });
--- a/toolkit/components/places/tests/bookmarks/test_458683.js
+++ b/toolkit/components/places/tests/bookmarks/test_458683.js
@@ -1,118 +1,98 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim:set ts=2 sw=2 sts=2 et: */
 /* 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/. */
 
-var tests = [];
-
 /*
   This test is:
     - don't block while doing backup and restore if tag containers contain
       bogus items (separators, folders)
 */
 
-var invalidTagChildTest = {
-  _itemTitle: "invalid uri",
-  _itemUrl: "http://test.mozilla.org/",
-  _itemId: -1,
-  _tag: "testTag",
-  _tagItemId: -1,
-
-  populate() {
-    // add a valid bookmark
-    this._itemId = PlacesUtils.bookmarks
-                              .insertBookmark(PlacesUtils.toolbarFolderId,
-                                              PlacesUtils._uri(this._itemUrl),
-                                              PlacesUtils.bookmarks.DEFAULT_INDEX,
-                                              this._itemTitle);
+const ITEM_TITLE = "invalid uri";
+const ITEM_URL = "http://test.mozilla.org/";
+const TAG_NAME = "testTag";
 
-    // create a tag
-    PlacesUtils.tagging.tagURI(PlacesUtils._uri(this._itemUrl), [this._tag]);
-    // get tag folder id
-    var options = PlacesUtils.history.getNewQueryOptions();
-    var query = PlacesUtils.history.getNewQuery();
-    query.setFolders([PlacesUtils.bookmarks.tagsFolder], 1);
-    var result = PlacesUtils.history.executeQuery(query, options);
-    var tagRoot = result.root;
-    tagRoot.containerOpen = true;
-    do_check_eq(tagRoot.childCount, 1);
-    var tagNode = tagRoot.getChild(0)
-                          .QueryInterface(Ci.nsINavHistoryContainerResultNode);
-    this._tagItemId = tagNode.itemId;
-    tagRoot.containerOpen = false;
+function validateResults() {
+  var query = PlacesUtils.history.getNewQuery();
+  query.setFolders([PlacesUtils.bookmarks.toolbarFolder], 1);
+  var options = PlacesUtils.history.getNewQueryOptions();
+  var result = PlacesUtils.history.executeQuery(query, options);
 
-    // add a separator and a folder inside tag folder
-    PlacesUtils.bookmarks.insertSeparator(this._tagItemId,
-                                         PlacesUtils.bookmarks.DEFAULT_INDEX);
-    PlacesUtils.bookmarks.createFolder(this._tagItemId,
-                                       "test folder",
-                                       PlacesUtils.bookmarks.DEFAULT_INDEX);
+  var toolbar = result.root;
+  toolbar.containerOpen = true;
 
-    // add a separator and a folder inside tag root
-    PlacesUtils.bookmarks.insertSeparator(PlacesUtils.bookmarks.tagsFolder,
-                                          PlacesUtils.bookmarks.DEFAULT_INDEX);
-    PlacesUtils.bookmarks.createFolder(PlacesUtils.bookmarks.tagsFolder,
-                                       "test tags root folder",
-                                       PlacesUtils.bookmarks.DEFAULT_INDEX);
-  },
-
-  clean() {
-    PlacesUtils.tagging.untagURI(PlacesUtils._uri(this._itemUrl), [this._tag]);
-    PlacesUtils.bookmarks.removeItem(this._itemId);
-  },
-
-  validate() {
-    var query = PlacesUtils.history.getNewQuery();
-    query.setFolders([PlacesUtils.bookmarks.toolbarFolder], 1);
-    var options = PlacesUtils.history.getNewQueryOptions();
-    var result = PlacesUtils.history.executeQuery(query, options);
+  // test for our bookmark
+  do_check_eq(toolbar.childCount, 1);
+  for (var i = 0; i < toolbar.childCount; i++) {
+    var folderNode = toolbar.getChild(0);
+    do_check_eq(folderNode.type, folderNode.RESULT_TYPE_URI);
+    do_check_eq(folderNode.title, ITEM_TITLE);
+  }
+  toolbar.containerOpen = false;
 
-    var toolbar = result.root;
-    toolbar.containerOpen = true;
-
-    // test for our bookmark
-    do_check_eq(toolbar.childCount, 1);
-    for (var i = 0; i < toolbar.childCount; i++) {
-      var folderNode = toolbar.getChild(0);
-      do_check_eq(folderNode.type, folderNode.RESULT_TYPE_URI);
-      do_check_eq(folderNode.title, this._itemTitle);
-    }
-    toolbar.containerOpen = false;
-
-    // test for our tag
-    var tags = PlacesUtils.tagging.getTagsForURI(PlacesUtils._uri(this._itemUrl));
-    do_check_eq(tags.length, 1);
-    do_check_eq(tags[0], this._tag);
-  }
-};
-tests.push(invalidTagChildTest);
+  // test for our tag
+  var tags = PlacesUtils.tagging.getTagsForURI(PlacesUtils._uri(ITEM_URL));
+  do_check_eq(tags.length, 1);
+  do_check_eq(tags[0], TAG_NAME);
+}
 
 add_task(async function() {
   let jsonFile = OS.Path.join(OS.Constants.Path.profileDir, "bookmarks.json");
 
-  // populate db
-  tests.forEach(function(aTest) {
-    aTest.populate();
-    // sanity
-    aTest.validate();
+  // add a valid bookmark
+  let item = await PlacesUtils.bookmarks.insert({
+    parentGuid: PlacesUtils.bookmarks.toolbarGuid,
+    title: ITEM_TITLE,
+    url: ITEM_URL,
   });
 
+  // create a tag
+  PlacesUtils.tagging.tagURI(PlacesUtils._uri(ITEM_URL), [TAG_NAME]);
+  // get tag folder id
+  var options = PlacesUtils.history.getNewQueryOptions();
+  var query = PlacesUtils.history.getNewQuery();
+  query.setFolders([PlacesUtils.bookmarks.tagsFolder], 1);
+  var result = PlacesUtils.history.executeQuery(query, options);
+  var tagRoot = result.root;
+  tagRoot.containerOpen = true;
+  do_check_eq(tagRoot.childCount, 1);
+  var tagNode = tagRoot.getChild(0)
+                        .QueryInterface(Ci.nsINavHistoryContainerResultNode);
+  let tagItemId = tagNode.itemId;
+  tagRoot.containerOpen = false;
+
+  // Currently these use the old API as the new API doesn't support inserting
+  // invalid items into the tag folder.
+
+  // add a separator and a folder inside tag folder
+  PlacesUtils.bookmarks.insertSeparator(tagItemId,
+                                       PlacesUtils.bookmarks.DEFAULT_INDEX);
+  PlacesUtils.bookmarks.createFolder(tagItemId,
+                                     "test folder",
+                                     PlacesUtils.bookmarks.DEFAULT_INDEX);
+
+  // add a separator and a folder inside tag root
+  PlacesUtils.bookmarks.insertSeparator(PlacesUtils.bookmarks.tagsFolder,
+                                        PlacesUtils.bookmarks.DEFAULT_INDEX);
+  PlacesUtils.bookmarks.createFolder(PlacesUtils.bookmarks.tagsFolder,
+                                     "test tags root folder",
+                                     PlacesUtils.bookmarks.DEFAULT_INDEX);
+  // sanity
+  validateResults();
+
   await BookmarkJSONUtils.exportToFile(jsonFile);
 
   // clean
-  tests.forEach(function(aTest) {
-    aTest.clean();
-  });
+  PlacesUtils.tagging.untagURI(PlacesUtils._uri(ITEM_URL), [TAG_NAME]);
+  await PlacesUtils.bookmarks.remove(item);
 
   // restore json file
   await BookmarkJSONUtils.importFromFile(jsonFile, true);
 
-  // validate
-  tests.forEach(function(aTest) {
-    aTest.validate();
-  });
+  validateResults();
 
   // clean up
   await OS.File.remove(jsonFile);
 });
--- a/toolkit/components/places/tests/bookmarks/test_818584-discard-duplicate-backups.js
+++ b/toolkit/components/places/tests/bookmarks/test_818584-discard-duplicate-backups.js
@@ -29,27 +29,29 @@ add_task(async function() {
   do_check_eq(backupFiles.length, 1);
 
   let matches = OS.Path.basename(backupFiles[0]).match(PlacesBackups.filenamesRegex);
   do_check_eq(matches[1], PlacesBackups.toISODateString(new Date()));
   do_check_eq(matches[2], count);
   do_check_eq(matches[3], hash);
 
   // Add a bookmark and create another backup.
-  let bookmarkId = PlacesUtils.bookmarks.insertBookmark(PlacesUtils.bookmarks.bookmarksMenuFolder,
-                                                        uri("http://foo.com"),
-                                                        PlacesUtils.bookmarks.DEFAULT_INDEX,
-                                                        "foo");
+  let bookmark = await PlacesUtils.bookmarks.insert({
+    parentGuid: PlacesUtils.bookmarks.menuGuid,
+    title: "foo",
+    url: "http://foo.com",
+  });
+
   // We must enforce a backup since one for today already exists.  The forced
   // backup will replace the existing one.
   await PlacesBackups.create(undefined, true);
   do_check_eq(backupFiles.length, 1);
   let recentBackup = await PlacesBackups.getMostRecentBackup();
   do_check_neq(recentBackup, OS.Path.join(backupFolder, oldBackupName));
   matches = OS.Path.basename(recentBackup).match(PlacesBackups.filenamesRegex);
   do_check_eq(matches[1], PlacesBackups.toISODateString(new Date()));
   do_check_eq(matches[2], count + 1);
   do_check_neq(matches[3], hash);
 
   // Clean up
-  PlacesUtils.bookmarks.removeItem(bookmarkId);
+  await PlacesUtils.bookmarks.remove(bookmark);
   await PlacesBackups.create(0);
 });
--- a/toolkit/components/places/tests/bookmarks/test_818587_compress-bookmarks-backups.js
+++ b/toolkit/components/places/tests/bookmarks/test_818587_compress-bookmarks-backups.js
@@ -25,29 +25,30 @@ add_task(async function compress_bookmar
 
   // Check that, if the user created a custom backup out of the default
   // backups folder, it gets copied (compressed) into it.
   let jsonFile = OS.Path.join(OS.Constants.Path.profileDir, "bookmarks.json");
   await PlacesBackups.saveBookmarksToJSONFile(jsonFile);
   do_check_eq((await PlacesBackups.getBackupFiles()).length, 1);
 
   // Check if import works from lz4 compressed json
-  let uri = NetUtil.newURI("http://www.mozilla.org/en-US/");
-  let bm  = PlacesUtils.bookmarks.insertBookmark(PlacesUtils.unfiledBookmarksFolderId,
-                                                 uri,
-                                                 PlacesUtils.bookmarks.DEFAULT_INDEX,
-                                                 "bookmark");
+  let url = "http://www.mozilla.org/en-US/"
+  let bm = await PlacesUtils.bookmarks.insert({
+    parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+    title: "bookmark",
+    url,
+  });
 
   // Force create a compressed backup, Remove the bookmark, the restore the backup
   await PlacesBackups.create(undefined, true);
   let recentBackup = await PlacesBackups.getMostRecentBackup();
-  PlacesUtils.bookmarks.removeItem(bm);
+  await PlacesUtils.bookmarks.remove(bm);
   await BookmarkJSONUtils.importFromFile(recentBackup, true);
   let root = PlacesUtils.getFolderContents(PlacesUtils.unfiledBookmarksFolderId).root;
   let node = root.getChild(0);
-  do_check_eq(node.uri, uri.spec);
+  do_check_eq(node.uri, url);
 
   root.containerOpen = false;
   PlacesUtils.bookmarks.removeFolderChildren(PlacesUtils.unfiledBookmarksFolderId);
 
   // Cleanup.
   await OS.File.remove(jsonFile);
 });
--- a/toolkit/components/places/tests/bookmarks/test_818593-store-backup-metadata.js
+++ b/toolkit/components/places/tests/bookmarks/test_818593-store-backup-metadata.js
@@ -3,21 +3,21 @@
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /**
  * To confirm that metadata i.e. bookmark count is set and retrieved for
  * automatic backups.
  */
 add_task(async function test_saveBookmarksToJSONFile_and_create() {
   // Add a bookmark
-  let uri = NetUtil.newURI("http://getfirefox.com/");
-  let bookmarkId =
-    PlacesUtils.bookmarks.insertBookmark(
-      PlacesUtils.unfiledBookmarksFolderId, uri,
-      PlacesUtils.bookmarks.DEFAULT_INDEX, "Get Firefox!");
+  let bookmark = await PlacesUtils.bookmarks.insert({
+    parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+    title: "Get Firefox!",
+    url: "http://getfirefox.com/"
+  });
 
   // Test saveBookmarksToJSONFile()
   let backupFile = FileUtils.getFile("TmpD", ["bookmarks.json"]);
   backupFile.create(Ci.nsIFile.NORMAL_FILE_TYPE, parseInt("0600", 8));
 
   let nodeCount = await PlacesBackups.saveBookmarksToJSONFile(backupFile, true);
   do_check_true(nodeCount > 0);
   do_check_true(backupFile.exists());
@@ -42,10 +42,10 @@ add_task(async function test_saveBookmar
   do_check_neq(mostRecentBackupFile, null);
   matches = OS.Path.basename(recentBackup).match(PlacesBackups.filenamesRegex);
   do_check_eq(matches[2], nodeCount);
   do_check_eq(matches[3].length, 24);
 
   // Cleanup
   backupFile.remove(false);
   await PlacesBackups.create(0);
-  PlacesUtils.bookmarks.removeItem(bookmarkId);
+  await PlacesUtils.bookmarks.remove(bookmark);
 });
--- a/toolkit/components/places/tests/bookmarks/test_992901-backup-unsorted-hierarchy.js
+++ b/toolkit/components/places/tests/bookmarks/test_992901-backup-unsorted-hierarchy.js
@@ -3,42 +3,54 @@
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /**
  * Checks that backups properly include all of the bookmarks if the hierarchy
  * in the database is unordered so that a hierarchy is defined before its
  * ancestor in the bookmarks table.
  */
 add_task(async function() {
-  let bm = PlacesUtils.bookmarks.insertBookmark(PlacesUtils.unfiledBookmarksFolderId,
-                                                NetUtil.newURI("http://mozilla.org/"),
-                                                PlacesUtils.bookmarks.DEFAULT_INDEX,
-                                                "bookmark");
-  let f2 = PlacesUtils.bookmarks.createFolder(PlacesUtils.unfiledBookmarksFolderId, "f2",
-                                              PlacesUtils.bookmarks.DEFAULT_INDEX);
-  PlacesUtils.bookmarks.moveItem(bm, f2, PlacesUtils.bookmarks.DEFAULT_INDEX);
-  let f1 = PlacesUtils.bookmarks.createFolder(PlacesUtils.unfiledBookmarksFolderId, "f1",
-                                              PlacesUtils.bookmarks.DEFAULT_INDEX);
-  PlacesUtils.bookmarks.moveItem(f2, f1, PlacesUtils.bookmarks.DEFAULT_INDEX);
+  let bms = await PlacesUtils.bookmarks.insertTree({
+    guid: PlacesUtils.bookmarks.unfiledGuid,
+    children: [{
+      title: "bookmark",
+      url: "http://mozilla.org",
+    }, {
+      title: "f2",
+      type: PlacesUtils.bookmarks.TYPE_FOLDER,
+    }, {
+      title: "f1",
+      type: PlacesUtils.bookmarks.TYPE_FOLDER,
+    }]
+  });
+
+  let bookmark = bms[0];
+  let folder2 = bms[1];
+  let folder1 = bms[2];
+  bookmark.parentGuid = folder2.guid;
+  await PlacesUtils.bookmarks.update(bookmark);
+
+  folder2.parentGuid = folder1.guid;
+  await PlacesUtils.bookmarks.update(folder2);
 
   // Create a backup.
   await PlacesBackups.create();
 
   // Remove the bookmarks, then restore the backup.
-  PlacesUtils.bookmarks.removeItem(f1);
+  await PlacesUtils.bookmarks.remove(folder1);
   await BookmarkJSONUtils.importFromFile((await PlacesBackups.getMostRecentBackup()), true);
 
   do_print("Checking first level");
   let root = PlacesUtils.getFolderContents(PlacesUtils.unfiledBookmarksFolderId).root;
   let level1 = root.getChild(0);
   do_check_eq(level1.title, "f1");
   do_print("Checking second level");
   PlacesUtils.asContainer(level1).containerOpen = true;
   let level2 = level1.getChild(0);
   do_check_eq(level2.title, "f2");
   do_print("Checking bookmark");
   PlacesUtils.asContainer(level2).containerOpen = true;
-  let bookmark = level2.getChild(0);
+  bookmark = level2.getChild(0);
   do_check_eq(bookmark.title, "bookmark");
   level2.containerOpen = false;
   level1.containerOpen = false;
   root.containerOpen = false;
 });
--- a/toolkit/components/places/tests/bookmarks/test_997030-bookmarks-html-encode.js
+++ b/toolkit/components/places/tests/bookmarks/test_997030-bookmarks-html-encode.js
@@ -1,32 +1,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/. */
 
 /**
  * Checks that we don't encodeURI twice when creating bookmarks.html.
  */
 add_task(async function() {
-  let uri = NetUtil.newURI("http://bt.ktxp.com/search.php?keyword=%E5%A6%84%E6%83%B3%E5%AD%A6%E7%94%9F%E4%BC%9A");
-  let bm = PlacesUtils.bookmarks.insertBookmark(PlacesUtils.unfiledBookmarksFolderId,
-                                                uri,
-                                                PlacesUtils.bookmarks.DEFAULT_INDEX,
-                                                "bookmark");
+  let url = "http://bt.ktxp.com/search.php?keyword=%E5%A6%84%E6%83%B3%E5%AD%A6%E7%94%9F%E4%BC%9A";
+  let bm = await PlacesUtils.bookmarks.insert({
+    parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+    title: "bookmark",
+    url,
+  });
 
-  let file =  OS.Path.join(OS.Constants.Path.profileDir, "bookmarks.exported.997030.html");
+  let file = OS.Path.join(OS.Constants.Path.profileDir, "bookmarks.exported.997030.html");
   if ((await OS.File.exists(file))) {
     await OS.File.remove(file);
   }
   await BookmarkHTMLUtils.exportToFile(file);
 
   // Remove the bookmarks, then restore the backup.
-  PlacesUtils.bookmarks.removeItem(bm);
+  await PlacesUtils.bookmarks.remove(bm);
   await BookmarkHTMLUtils.importFromFile(file, true);
 
   do_print("Checking first level");
   let root = PlacesUtils.getFolderContents(PlacesUtils.unfiledBookmarksFolderId).root;
   let node = root.getChild(0);
-  do_check_eq(node.uri, uri.spec);
+  do_check_eq(node.uri, url);
 
   root.containerOpen = false;
-  PlacesUtils.bookmarks.removeFolderChildren(PlacesUtils.unfiledBookmarksFolderId);
+  await PlacesUtils.bookmarks.eraseEverything();
 });
--- a/toolkit/components/places/tests/bookmarks/test_savedsearches.js
+++ b/toolkit/components/places/tests/bookmarks/test_savedsearches.js
@@ -1,51 +1,54 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim:set ts=2 sw=2 sts=2 et: */
 /* 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/. */
 
-// get bookmarks root id
-var root = PlacesUtils.bookmarksMenuFolderId;
-
 // a search term that matches a default bookmark
 const searchTerm = "about";
 
 var testRoot;
+var testRootId;
 
-// main
-function run_test() {
+add_task(async function setup() {
   // create a folder to hold all the tests
   // this makes the tests more tolerant of changes to the default bookmarks set
   // also, name it using the search term, for testing that containers that match don't show up in query results
-  testRoot = PlacesUtils.bookmarks.createFolder(
-    root, searchTerm, PlacesUtils.bookmarks.DEFAULT_INDEX);
-
-  run_next_test();
-}
+  testRoot = await PlacesUtils.bookmarks.insert({
+    parentGuid: PlacesUtils.bookmarks.menuGuid,
+    title: searchTerm,
+    type: PlacesUtils.bookmarks.TYPE_FOLDER,
+  });
+  testRootId = await PlacesUtils.promiseItemId(testRoot.guid);
+});
 
-add_test(function test_savedsearches_bookmarks() {
+add_task(async function test_savedsearches_bookmarks() {
   // add a bookmark that matches the search term
-  var bookmarkId = PlacesUtils.bookmarks.insertBookmark(
-    root, uri("http://foo.com"), PlacesUtils.bookmarks.DEFAULT_INDEX,
-    searchTerm);
+  let bookmark = await PlacesUtils.bookmarks.insert({
+    parentGuid: PlacesUtils.bookmarks.menuGuid,
+    title: searchTerm,
+    url: "http://foo.com",
+  });
 
   // create a saved-search that matches a default bookmark
-  var searchId = PlacesUtils.bookmarks.insertBookmark(
-    testRoot, uri("place:terms=" + searchTerm + "&excludeQueries=1&expandQueries=1&queryType=1"),
-    PlacesUtils.bookmarks.DEFAULT_INDEX, searchTerm);
+  let search = await PlacesUtils.bookmarks.insert({
+    parentGuid: testRoot.guid,
+    title: searchTerm,
+    url: "place:terms=" + searchTerm + "&excludeQueries=1&expandQueries=1&queryType=1",
+  });
 
   // query for the test root, expandQueries=0
   // the query should show up as a regular bookmark
   try {
     let options = PlacesUtils.history.getNewQueryOptions();
     options.expandQueries = 0;
     let query = PlacesUtils.history.getNewQuery();
-    query.setFolders([testRoot], 1);
+    query.setFolders([testRootId], 1);
     let result = PlacesUtils.history.executeQuery(query, options);
     let rootNode = result.root;
     rootNode.containerOpen = true;
     let cc = rootNode.childCount;
     do_check_eq(cc, 1);
     for (let i = 0; i < cc; i++) {
       let node = rootNode.getChild(i);
       // test that queries have valid itemId
@@ -61,17 +64,17 @@ add_test(function test_savedsearches_boo
 
   // bookmark saved search
   // query for the test root, expandQueries=1
   // the query should show up as a query container, with 1 child
   try {
     let options = PlacesUtils.history.getNewQueryOptions();
     options.expandQueries = 1;
     let query = PlacesUtils.history.getNewQuery();
-    query.setFolders([testRoot], 1);
+    query.setFolders([testRootId], 1);
     let result = PlacesUtils.history.executeQuery(query, options);
     let rootNode = result.root;
     rootNode.containerOpen = true;
     let cc = rootNode.childCount;
     do_check_eq(cc, 1);
     for (let i = 0; i < cc; i++) {
       let node = rootNode.getChild(i);
       // test that query node type is container when expandQueries=1
@@ -83,77 +86,82 @@ add_test(function test_savedsearches_boo
 
       // test that queries have children when excludeItems=1
       // test that query nodes don't show containers (shouldn't have our folder that matches)
       // test that queries don't show themselves in query results (shouldn't have our saved search)
       do_check_eq(node.childCount, 1);
 
       // test that bookmark shows in query results
       var item = node.getChild(0);
-      do_check_eq(item.itemId, bookmarkId);
+      do_check_eq(item.bookmarkGuid, bookmark.guid);
 
       // XXX - FAILING - test live-update of query results - add a bookmark that matches the query
       // var tmpBmId = PlacesUtils.bookmarks.insertBookmark(
       //  root, uri("http://" + searchTerm + ".com"),
       //  PlacesUtils.bookmarks.DEFAULT_INDEX, searchTerm + "blah");
       // do_check_eq(query.childCount, 2);
 
       // XXX - test live-update of query results - delete a bookmark that matches the query
       // PlacesUtils.bookmarks.removeItem(tmpBMId);
       // do_check_eq(query.childCount, 1);
 
       // test live-update of query results - add a folder that matches the query
-      PlacesUtils.bookmarks.createFolder(
-        root, searchTerm + "zaa", PlacesUtils.bookmarks.DEFAULT_INDEX);
+      await PlacesUtils.bookmarks.insert({
+        parentGuid: PlacesUtils.bookmarks.menuGuid,
+        title: searchTerm + "zaa",
+        type: PlacesUtils.bookmarks.TYPE_FOLDER,
+      });
       do_check_eq(node.childCount, 1);
       // test live-update of query results - add a query that matches the query
-      PlacesUtils.bookmarks.insertBookmark(
-        root, uri("place:terms=foo&excludeQueries=1&expandQueries=1&queryType=1"),
-        PlacesUtils.bookmarks.DEFAULT_INDEX, searchTerm + "blah");
+      await PlacesUtils.bookmarks.insert({
+        parentGuid: PlacesUtils.bookmarks.menuGuid,
+        title: searchTerm + "blah",
+        url: "place:terms=foo&excludeQueries=1&expandQueries=1&queryType=1",
+      });
       do_check_eq(node.childCount, 1);
     }
     rootNode.containerOpen = false;
   } catch (ex) {
     do_throw("expandQueries=1 bookmarks query: " + ex);
   }
 
   // delete the bookmark search
-  PlacesUtils.bookmarks.removeItem(searchId);
-
-  run_next_test();
+  await PlacesUtils.bookmarks.remove(search);
 });
 
 add_task(async function test_savedsearches_history() {
   // add a visit that matches the search term
   var testURI = uri("http://" + searchTerm + ".com");
   await PlacesTestUtils.addVisits({ uri: testURI, title: searchTerm });
 
   // create a saved-search that matches the visit we added
-  var searchId = PlacesUtils.bookmarks.insertBookmark(testRoot,
-    uri("place:terms=" + searchTerm + "&excludeQueries=1&expandQueries=1&queryType=0"),
-    PlacesUtils.bookmarks.DEFAULT_INDEX, searchTerm);
+  var searchItem = await PlacesUtils.bookmarks.insert({
+    parentGuid: testRoot.guid,
+    title: searchTerm,
+    url: "place:terms=" + searchTerm + "&excludeQueries=1&expandQueries=1&queryType=0",
+  });
 
   // query for the test root, expandQueries=1
   // the query should show up as a query container, with 1 child
   try {
     var options = PlacesUtils.history.getNewQueryOptions();
     options.expandQueries = 1;
     var query = PlacesUtils.history.getNewQuery();
-    query.setFolders([testRoot], 1);
+    query.setFolders([testRootId], 1);
     var result = PlacesUtils.history.executeQuery(query, options);
     var rootNode = result.root;
     rootNode.containerOpen = true;
     var cc = rootNode.childCount;
     do_check_eq(cc, 1);
     for (var i = 0; i < cc; i++) {
       var node = rootNode.getChild(i);
       // test that query node type is container when expandQueries=1
       do_check_eq(node.type, node.RESULT_TYPE_QUERY);
       // test that queries (as containers) have valid itemId
-      do_check_eq(node.itemId, searchId);
+      do_check_eq(node.bookmarkGuid, searchItem.guid);
       node.QueryInterface(Ci.nsINavHistoryContainerResultNode);
       node.containerOpen = true;
 
       // test that queries have children when excludeItems=1
       // test that query nodes don't show containers (shouldn't have our folder that matches)
       // test that queries don't show themselves in query results (shouldn't have our saved search)
       do_check_eq(node.childCount, 1);
 
@@ -172,35 +180,38 @@ add_task(async function test_savedsearch
 
       // test live-update of query results - delete a history visit that matches the query
       await PlacesUtils.history.remove("http://foo.com");
       do_check_eq(node.childCount, 1);
       node.containerOpen = false;
     }
 
     // test live-update of moved queries
-    var tmpFolderId = PlacesUtils.bookmarks.createFolder(
-      testRoot, "foo", PlacesUtils.bookmarks.DEFAULT_INDEX);
-    PlacesUtils.bookmarks.moveItem(
-      searchId, tmpFolderId, PlacesUtils.bookmarks.DEFAULT_INDEX);
+    let tmpFolder = await PlacesUtils.bookmarks.insert({
+      parentGuid: testRoot.guid,
+      title: "foo",
+      type: PlacesUtils.bookmarks.TYPE_FOLDER,
+    });
+
+    searchItem.parentGuid = tmpFolder.guid;
+    await PlacesUtils.bookmarks.update(searchItem);
     var tmpFolderNode = rootNode.getChild(0);
-    do_check_eq(tmpFolderNode.itemId, tmpFolderId);
+    do_check_eq(tmpFolderNode.bookmarkGuid, tmpFolder.guid);
     tmpFolderNode.QueryInterface(Ci.nsINavHistoryContainerResultNode);
     tmpFolderNode.containerOpen = true;
     do_check_eq(tmpFolderNode.childCount, 1);
 
     // test live-update of renamed queries
-    PlacesUtils.bookmarks.setItemTitle(searchId, "foo");
+    searchItem.title = "foo";
+    await PlacesUtils.bookmarks.update(searchItem);
     do_check_eq(tmpFolderNode.title, "foo");
 
     // test live-update of deleted queries
-    PlacesUtils.bookmarks.removeItem(searchId);
-    try {
-      tmpFolderNode = root.getChild(1);
-      do_throw("query was not removed");
-    } catch (ex) {}
+    await PlacesUtils.bookmarks.remove(searchItem);
+    Assert.throws(() => tmpFolderNode = rootNode.getChild(1), /NS_ERROR_ILLEGAL_VALUE/,
+      "getting a deleted child should throw");
 
     tmpFolderNode.containerOpen = false;
     rootNode.containerOpen = false;
   } catch (ex) {
     do_throw("expandQueries=1 bookmarks query: " + ex);
   }
 });
--- a/toolkit/components/places/tests/unifiedcomplete/test_extension_matches.js
+++ b/toolkit/components/places/tests/unifiedcomplete/test_extension_matches.js
@@ -190,17 +190,20 @@ add_task(async function test_removes_sug
     name: extensionName,
     emit(message, text, id) {
       if (message === ExtensionSearchHandler.MSG_INPUT_CHANGED) {
         ExtensionSearchHandler.addSuggestions(keyword, id, [
           {content: "foo", description: "first suggestion"},
           {content: "bar", description: "second suggestion"},
           {content: "baz", description: "third suggestion"},
         ]);
-        controller.stopSearch();
+        // The API doesn't have a way to notify when addition is complete.
+        do_timeout(1000, () => {
+          controller.stopSearch();
+        });
       }
     }
   };
 
   ExtensionSearchHandler.registerKeyword(keyword, mockExtension);
 
   await check_autocomplete({
     search: `${keyword} unmatched`,
@@ -297,18 +300,21 @@ add_task(async function test_setting_the
   let keyword = "test";
   let extensionName = "Omnibox Example";
 
   let mockExtension = {
     name: extensionName,
     emit(message, text, id) {
       if (message === ExtensionSearchHandler.MSG_INPUT_CHANGED) {
         ExtensionSearchHandler.addSuggestions(keyword, id, []);
+        // The API doesn't have a way to notify when addition is complete.
+        do_timeout(1000, () => {
+          controller.stopSearch();
+        });
       }
-      controller.stopSearch();
     }
   };
 
   ExtensionSearchHandler.registerKeyword(keyword, mockExtension);
 
   ExtensionSearchHandler.setDefaultSuggestion(keyword, {
     description: "hello world"
   });
@@ -353,17 +359,20 @@ add_task(async function test_maximum_num
           {content: "d", description: "fourth suggestion"},
           {content: "e", description: "fifth suggestion"},
           {content: "f", description: "sixth suggestion"},
           {content: "g", description: "seventh suggestion"},
           {content: "h", description: "eigth suggestion"},
           {content: "i", description: "ninth suggestion"},
           {content: "j", description: "tenth suggestion"},
         ]);
-        controller.stopSearch();
+        // The API doesn't have a way to notify when addition is complete.
+        do_timeout(1000, () => {
+          controller.stopSearch();
+        });
       }
     }
   };
 
   ExtensionSearchHandler.registerKeyword(keyword, mockExtension);
 
   // Start an input session before testing MSG_INPUT_CHANGED.
   ExtensionSearchHandler.handleSearch(keyword, `${keyword} `, () => {});
--- a/tools/clang-tidy/config.yaml
+++ b/tools/clang-tidy/config.yaml
@@ -5,22 +5,26 @@ target: obj-x86_64-pc-linux-gnu
 # All the clang checks used by the static-analysis tools.
 clang_checkers:
  - name: -*
    publish: !!bool no
  - name: clang-analyzer-deadcode.DeadStores
    publish: !!bool yes
  - name: clang-analyzer-security.*
    publish: !!bool no
+ - name: misc-argument-comment
+   publish: !!bool yes
  - name: misc-assert-side-effect
    publish: !!bool yes
  - name: misc-suspicious-missing-comma
    publish: !!bool yes
  - name: misc-suspicious-semicolon
    publish: !!bool yes
+ - name: misc-unused-using-decls
+   publish: !!bool yes
  - name: modernize-avoid-bind
    publish: !!bool yes
  - name: modernize-loop-convert
    publish: !!bool yes
  - name: modernize-raw-string-literal
    publish: !!bool yes
  - name: modernize-redundant-void-arg
    publish: !!bool no