Merge mozilla-central to mozilla-inbound. a=merge CLOSED TREE
authorCiure Andrei <aciure@mozilla.com>
Wed, 04 Apr 2018 00:58:50 +0300
changeset 411573 8d846598d35dfb32da29898d060315b549867377
parent 411513 fac38e508661a43c52c5ae2aa75e7bf130073571 (current diff)
parent 411572 00bdc9451be6557ccce1492b9b966d4435615380 (diff)
child 411574 8a703ca86a968b8e343e10fc6d084673bcf32d94
push id101686
push useraciure@mozilla.com
push dateTue, 03 Apr 2018 21:59:31 +0000
treeherdermozilla-inbound@8d846598d35d [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone61.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-central to mozilla-inbound. a=merge CLOSED TREE
browser/base/content/browser-tabsintitlebar-stub.js
dom/base/nsContentUtils.cpp
dom/base/nsContentUtils.h
mobile/android/branding/nightly-old-id/configure.sh
mobile/android/branding/nightly-old-id/content/about.png
mobile/android/branding/nightly-old-id/content/favicon32.png
mobile/android/branding/nightly-old-id/content/favicon64.png
mobile/android/branding/nightly-old-id/content/jar.mn
mobile/android/branding/nightly-old-id/content/moz.build
mobile/android/branding/nightly-old-id/locales/en-US/brand.dtd
mobile/android/branding/nightly-old-id/locales/en-US/brand.properties
mobile/android/branding/nightly-old-id/locales/jar.mn
mobile/android/branding/nightly-old-id/locales/moz.build
mobile/android/branding/nightly-old-id/moz.build
mobile/android/branding/nightly-old-id/res/drawable-hdpi/icon.png
mobile/android/branding/nightly-old-id/res/drawable-hdpi/large_icon.png
mobile/android/branding/nightly-old-id/res/drawable-nodpi/firstrun_welcome.png
mobile/android/branding/nightly-old-id/res/drawable-xhdpi/icon.png
mobile/android/branding/nightly-old-id/res/drawable-xhdpi/large_icon.png
mobile/android/branding/nightly-old-id/res/drawable-xxhdpi/icon.png
mobile/android/branding/nightly-old-id/res/drawable-xxhdpi/large_icon.png
mobile/android/branding/nightly-old-id/res/drawable-xxxhdpi/icon.png
mobile/android/config/mozconfigs/android-api-16/nightly-old-id
mobile/android/config/mozconfigs/android-x86/nightly-old-id
testing/mozharness/configs/builds/releng_sub_android_configs/64_api_16_old_id.py
testing/mozharness/configs/builds/releng_sub_android_configs/64_x86_old_id.py
toolkit/components/payments/res/log.js
deleted file mode 100644
--- a/browser/base/content/browser-tabsintitlebar-stub.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-// This file is used as a stub object for platforms which
-// don't have CAN_DRAW_IN_TITLEBAR defined.
-
-var TabsInTitlebar = {
-  init() {},
-  whenWindowLayoutReady() {},
-  uninit() {},
-  allowedBy() {},
-  update() {},
-  enabled: false,
-};
--- a/browser/base/content/browser-tabsintitlebar.js
+++ b/browser/base/content/browser-tabsintitlebar.js
@@ -1,26 +1,18 @@
 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-// Note: the file browser-tabsintitlebar-stub.js is used instead of
-// this one on platforms which don't have CAN_DRAW_IN_TITLEBAR defined.
-
 var TabsInTitlebar = {
   init() {
     this._readPref();
     Services.prefs.addObserver(this._prefName, this);
 
-    // Always disable on unsupported GTK versions.
-    if (AppConstants.MOZ_WIDGET_TOOLKIT == "gtk3") {
-      this.allowedBy("gtk", window.matchMedia("(-moz-gtk-csd-available)"));
-    }
-
     // We need to update the appearance of the titlebar when the menu changes
     // from the active to the inactive state. We can't, however, rely on
     // DOMMenuBarInactive, because the menu fires this event and then removes
     // the inactive attribute after an event-loop spin.
     //
     // Because updating the appearance involves sampling the heights and margins
     // of various elements, it's important that the layout be more or less
     // settled before updating the titlebar. So instead of listening to
@@ -61,16 +53,31 @@ var TabsInTitlebar = {
         this.update();
       }
     } else if (!(condition in this._disallowed)) {
       this._disallowed[condition] = null;
       this.update();
     }
   },
 
+  get systemSupported() {
+    let isSupported = false;
+    switch (AppConstants.MOZ_WIDGET_TOOLKIT) {
+      case "windows":
+      case "cocoa":
+        isSupported = true;
+        break;
+      case "gtk3":
+        isSupported = window.matchMedia("(-moz-gtk-csd-available)");
+        break;
+    }
+    delete this.systemSupported;
+    return this.systemSupported = isSupported;
+  },
+
   get enabled() {
     return document.documentElement.getAttribute("tabsintitlebar") == "true";
   },
 
   observe(subject, topic, data) {
     if (topic == "nsPref:changed")
       this._readPref();
   },
@@ -129,17 +136,18 @@ var TabsInTitlebar = {
                    Services.prefs.getBoolPref(this._prefName));
   },
 
   update() {
     if (!this._initialized || window.fullScreen) {
       return;
     }
 
-    let allowed = (Object.keys(this._disallowed)).length == 0;
+    let allowed = this.systemSupported &&
+                  (Object.keys(this._disallowed)).length == 0;
     if (allowed) {
       document.documentElement.setAttribute("tabsintitlebar", "true");
       if (AppConstants.platform == "macosx") {
         document.documentElement.setAttribute("chromemargin", "0,-1,-1,-1");
         document.documentElement.removeAttribute("drawtitle");
       } else {
         document.documentElement.setAttribute("chromemargin", "0,2,2,2");
       }
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -272,17 +272,16 @@ window:not([chromehidden~="toolbar"]) #n
  * using a tagname as the last item would be less so.
  */
 #widget-overflow-list:empty + #widget-overflow-fixed-separator,
 #widget-overflow:not([hasfixeditems]) #widget-overflow-fixed-separator {
   display: none;
 }
 
 
-%ifdef CAN_DRAW_IN_TITLEBAR
 %ifdef MENUBAR_CAN_AUTOHIDE
 #toolbar-menubar:not([autohide=true]) + #TabsToolbar > .titlebar-placeholder,
 %endif
 %ifndef MOZ_WIDGET_COCOA
 #main-window:not([sizemode=normal]) .titlebar-placeholder[type="pre-tabs"],
 %endif
 #main-window:not([chromemargin]) > #titlebar,
 #main-window[inFullscreen] > #titlebar,
@@ -342,18 +341,16 @@ toolbarpaletteitem {
 }
 
 #main-window[tabletmode] #titlebar-min,
 #main-window[tabletmode] #titlebar-max {
   display: none !important;
 }
 %endif
 
-%endif
-
 #main-window[inFullscreen][inDOMFullscreen] #navigator-toolbox,
 #main-window[inFullscreen][inDOMFullscreen] #fullscr-toggler,
 #main-window[inFullscreen][inDOMFullscreen] #sidebar-box,
 #main-window[inFullscreen][inDOMFullscreen] #sidebar-splitter,
 #main-window[inFullscreen][inDOMFullscreen] #developer-toolbar,
 #main-window[inFullscreen]:not([OSXLionFullscreen]) toolbar:not([fullscreentoolbar=true]),
 #main-window[inFullscreen] #global-notificationbox,
 #main-window[inFullscreen] #high-priority-global-notificationbox {
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -41,24 +41,22 @@
         titlemodifier_normal=""
         titlemodifier_privatebrowsing="&mainWindow.titlePrivateBrowsingSuffix;"
 #else
         title_privatebrowsing="&mainWindow.titlemodifier; &mainWindow.titlePrivateBrowsingSuffix;"
         titlemodifier="&mainWindow.titlemodifier;"
         titlemodifier_normal="&mainWindow.titlemodifier;"
         titlemodifier_privatebrowsing="&mainWindow.titlemodifier; &mainWindow.titlePrivateBrowsingSuffix;"
 #endif
-#ifdef CAN_DRAW_IN_TITLEBAR
 #ifdef XP_WIN
         chromemargin="0,2,2,2"
 #else
         chromemargin="0,-1,-1,-1"
 #endif
         tabsintitlebar="true"
-#endif
         titlemenuseparator="&mainWindow.titlemodifiermenuseparator;"
         windowtype="navigator:browser"
         macanimationtype="document"
         screenX="4" screenY="4"
         fullscreenbutton="true"
         sizemode="normal"
         retargetdocumentfocus="urlbar"
         persist="screenX screenY width height sizemode">
@@ -593,17 +591,16 @@
       <menuseparator/>
       <menuitem label="&syncSyncNowItem.label;"
                 accesskey="&syncSyncNowItem.accesskey;"
                 id="syncedTabsRefreshFilter"/>
     </menupopup>
   </popupset>
   <box id="appMenu-viewCache" hidden="true"/>
 
-#ifdef CAN_DRAW_IN_TITLEBAR
 <vbox id="titlebar">
   <hbox id="titlebar-content">
     <spacer id="titlebar-spacer" flex="1"/>
     <hbox id="titlebar-buttonbox-container">
       <hbox id="titlebar-buttonbox" class="titlebar-color">
         <toolbarbutton class="titlebar-button" id="titlebar-min" oncommand="window.minimize();"/>
         <toolbarbutton class="titlebar-button" id="titlebar-max" oncommand="onTitlebarMaxClick();"/>
         <toolbarbutton class="titlebar-button" id="titlebar-close" command="cmd_closeWindow"/>
@@ -615,17 +612,16 @@
     <hbox id="titlebar-secondary-buttonbox" dir="ltr">
       <button class="accessibility-indicator" tooltiptext="&accessibilityIndicator.tooltip;" aria-live="polite"/>
       <hbox class="private-browsing-indicator"/>
       <hbox id="titlebar-fullscreen-button"/>
     </hbox>
 #endif
   </hbox>
 </vbox>
-#endif
 
   <toolbox id="navigator-toolbox">
     <!-- Menu -->
     <toolbar type="menubar" id="toolbar-menubar"
              class="chromeclass-menubar titlebar-color"
              customizable="true"
              mode="icons"
 #ifdef MENUBAR_CAN_AUTOHIDE
@@ -635,37 +631,32 @@
 #endif
              context="toolbar-context-menu">
       <toolbaritem id="menubar-items" align="center">
 # The entire main menubar is placed into browser-menubar.inc, so that it can be
 # shared with other top level windows in macWindow.inc.xul.
 #include browser-menubar.inc
       </toolbaritem>
 
-#ifdef CAN_DRAW_IN_TITLEBAR
 #ifndef XP_MACOSX
       <hbox class="titlebar-placeholder" type="caption-buttons" ordinal="1000"
             skipintoolbarset="true"/>
 #endif
-#endif
     </toolbar>
 
     <toolbar id="TabsToolbar"
              class="titlebar-color"
              fullscreentoolbar="true"
              customizable="true"
              mode="icons"
              aria-label="&tabsToolbar.label;"
              context="toolbar-context-menu"
              collapsed="true">
-
-#ifdef CAN_DRAW_IN_TITLEBAR
       <hbox class="titlebar-placeholder" type="pre-tabs"
             skipintoolbarset="true"/>
-#endif
 
       <tabs id="tabbrowser-tabs"
             flex="1"
             setfocus="false"
             tooltip="tabbrowser-tab-tooltip"
             stopwatchid="FX_TAB_CLICK_MS">
         <tab class="tabbrowser-tab" selected="true" visuallyselected="true" fadein="true"/>
       </tabs>
@@ -699,39 +690,35 @@
           <menu id="alltabs_containersTab"
                 label="&newUserContext.label;">
             <menupopup id="alltabs_containersMenuTab" />
           </menu>
           <menuseparator id="alltabs-popup-separator-2"/>
         </menupopup>
       </toolbarbutton>
 
-#ifdef CAN_DRAW_IN_TITLEBAR
       <hbox class="titlebar-placeholder" type="post-tabs"
             ordinal="1000"
             skipintoolbarset="true"/>
-#endif
 
       <button class="accessibility-indicator" tooltiptext="&accessibilityIndicator.tooltip;"
               ordinal="1000"
               aria-live="polite" skipintoolbarset="true"/>
       <hbox class="private-browsing-indicator" skipintoolbarset="true"
             ordinal="1000"/>
-#ifdef CAN_DRAW_IN_TITLEBAR
       <hbox class="titlebar-placeholder" type="caption-buttons"
 #ifndef XP_MACOSX
             ordinal="1000"
 #endif
             skipintoolbarset="true"/>
 
 #ifdef XP_MACOSX
       <hbox class="titlebar-placeholder" type="fullscreen-button"
             skipintoolbarset="true"/>
 #endif
-#endif
     </toolbar>
 
     <toolbar id="nav-bar"
              aria-label="&navbarCmd.label;"
              fullscreentoolbar="true" mode="icons" customizable="true"
              customizationtarget="nav-bar-customization-target"
              overflowable="true"
              overflowbutton="nav-bar-overflow-button"
--- a/browser/base/content/test/general/browser_bug432599.js
+++ b/browser/base/content/test/general/browser_bug432599.js
@@ -1,9 +1,11 @@
-/* eslint-disable mozilla/no-arbitrary-setTimeout */
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
 function invokeUsingCtrlD(phase) {
   switch (phase) {
   case 1:
     EventUtils.synthesizeKey("d", {accelKey: true});
     break;
   case 2:
   case 4:
     EventUtils.synthesizeKey("KEY_Escape");
@@ -26,101 +28,63 @@ function invokeUsingStarButton(phase) {
     break;
   case 3:
      EventUtils.synthesizeMouseAtCenter(BookmarkingUI.star,
                                         { clickCount: 2 });
     break;
   }
 }
 
-var testURL = "data:text/plain,Content";
-var bookmarkId;
+add_task(async function() {
+  const TEST_URL = "data:text/plain,Content";
 
-function add_bookmark(aURI, aTitle) {
-  return PlacesUtils.bookmarks.insertBookmark(PlacesUtils.unfiledBookmarksFolderId,
-                                              aURI, PlacesUtils.bookmarks.DEFAULT_INDEX,
-                                              aTitle);
-}
-
-// test bug 432599
-function test() {
-  waitForExplicitFinish();
-
-  gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
-  BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(() => {
-    waitForStarChange(false, initTest);
+  let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_URL);
+  registerCleanupFunction(async () => {
+    await BrowserTestUtils.removeTab(tab);
+    await PlacesUtils.bookmarks.eraseEverything();
   });
 
-  gBrowser.loadURI(testURL);
-}
-
-function initTest() {
-  // First, bookmark the page.
-  bookmarkId = add_bookmark(makeURI(testURL), "Bug 432599 Test");
-
-  checkBookmarksPanel(invokers[currentInvoker], 1);
-}
+  // Changing the location causes the star to asynchronously update, thus wait
+  // for it to be in a stable state before proceeding.
+  await TestUtils.waitForCondition(
+    () => BookmarkingUI.status == BookmarkingUI.STATUS_UNSTARRED
+  );
 
-function waitForStarChange(aValue, aCallback) {
-  let expectedStatus = aValue ? BookmarkingUI.STATUS_STARRED
-                              : BookmarkingUI.STATUS_UNSTARRED;
-  if (BookmarkingUI.status == BookmarkingUI.STATUS_UPDATING ||
-      BookmarkingUI.status != expectedStatus) {
-    info("Waiting for star button change.");
-    setTimeout(waitForStarChange, 50, aValue, aCallback);
-    return;
+  await PlacesUtils.bookmarks.insert({
+    parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+    url: TEST_URL,
+    title: "Bug 432599 Test"
+  });
+  Assert.equal(BookmarkingUI.status, BookmarkingUI.STATUS_STARRED,
+               "The star state should be starred");
+
+  for (let invoker of [invokeUsingStarButton, invokeUsingCtrlD]) {
+    for (let phase = 1; phase < 5; ++phase) {
+      let promise = checkBookmarksPanel(phase);
+      invoker(phase);
+      await promise;
+      Assert.equal(BookmarkingUI.status, BookmarkingUI.STATUS_STARRED,
+                   "The star state shouldn't change");
+    }
   }
-  aCallback();
-}
-
-var invokers = [invokeUsingStarButton, invokeUsingCtrlD];
-var currentInvoker = 0;
+});
 
 var initialValue;
 var initialRemoveHidden;
-
-var popupElement = document.getElementById("editBookmarkPanel");
-var titleElement = document.getElementById("editBookmarkPanelTitle");
-var removeElement = document.getElementById("editBookmarkPanelRemoveButton");
-
-function checkBookmarksPanel(invoker, phase) {
-  let onPopupShown = function popupShownListener(aEvent) {
-    if (aEvent.originalTarget == popupElement) {
-      popupElement.removeEventListener("popupshown", popupShownListener);
-      checkBookmarksPanel(invoker, phase + 1);
-    }
-  };
-  let onPopupHidden = function listener(aEvent) {
-    if (aEvent.originalTarget == popupElement) {
-      popupElement.removeEventListener("popuphidden", listener);
-      if (phase < 4) {
-        checkBookmarksPanel(invoker, phase + 1);
-      } else {
-        ++currentInvoker;
-        if (currentInvoker < invokers.length) {
-          checkBookmarksPanel(invokers[currentInvoker], 1);
-        } else {
-          gBrowser.removeTab(gBrowser.selectedTab, {skipPermitUnload: true});
-          PlacesUtils.bookmarks.removeItem(bookmarkId);
-          executeSoon(finish);
-        }
-      }
-    }
-  };
-
+function checkBookmarksPanel(phase) {
+  let popupElement = document.getElementById("editBookmarkPanel");
+  let titleElement = document.getElementById("editBookmarkPanelTitle");
+  let removeElement = document.getElementById("editBookmarkPanelRemoveButton");
   switch (phase) {
   case 1:
   case 3:
-    popupElement.addEventListener("popupshown", onPopupShown);
-    break;
+    return promisePopupEvent(popupElement, "shown");
   case 2:
-    popupElement.addEventListener("popuphidden", onPopupHidden);
     initialValue = titleElement.value;
     initialRemoveHidden = removeElement.hidden;
-    break;
+    return promisePopupEvent(popupElement, "hidden");
   case 4:
-    popupElement.addEventListener("popuphidden", onPopupHidden);
-    is(titleElement.value, initialValue, "The bookmark panel's title should be the same");
-    is(removeElement.hidden, initialRemoveHidden, "The bookmark panel's visibility should not change");
-    break;
+    Assert.equal(titleElement.value, initialValue, "The bookmark panel's title should be the same");
+    Assert.equal(removeElement.hidden, initialRemoveHidden, "The bookmark panel's visibility should not change");
+    return promisePopupEvent(popupElement, "hidden");
   }
-  invoker(phase);
+  return Promise.reject(new Error("Unknown phase"));
 }
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
@@ -63,21 +63,17 @@ browser.jar:
         content/browser/browser-media.js              (content/browser-media.js)
         content/browser/browser-pageActions.js        (content/browser-pageActions.js)
         content/browser/browser-places.js             (content/browser-places.js)
         content/browser/browser-plugins.js            (content/browser-plugins.js)
         content/browser/browser-safebrowsing.js       (content/browser-safebrowsing.js)
         content/browser/browser-sidebar.js            (content/browser-sidebar.js)
         content/browser/browser-sync.js               (content/browser-sync.js)
 *       content/browser/browser-tabPreviews.xml       (content/browser-tabPreviews.xml)
-#ifdef CAN_DRAW_IN_TITLEBAR
         content/browser/browser-tabsintitlebar.js       (content/browser-tabsintitlebar.js)
-#else
-        content/browser/browser-tabsintitlebar.js       (content/browser-tabsintitlebar-stub.js)
-#endif
         content/browser/browser-thumbnails.js         (content/browser-thumbnails.js)
         content/browser/browser-trackingprotection.js (content/browser-trackingprotection.js)
         content/browser/browser-webrender.js          (content/browser-webrender.js)
         content/browser/tab-content.js                (content/tab-content.js)
         content/browser/content.js                    (content/content.js)
         content/browser/default-theme-icon.svg        (content/default-theme-icon.svg)
         content/browser/defaultthemes/1.header.jpg    (content/defaultthemes/1.header.jpg)
         content/browser/defaultthemes/1.icon.jpg      (content/defaultthemes/1.icon.jpg)
--- a/browser/base/moz.build
+++ b/browser/base/moz.build
@@ -57,15 +57,12 @@ BROWSER_CHROME_MANIFESTS += [
 DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION']
 DEFINES['MOZ_APP_VERSION_DISPLAY'] = CONFIG['MOZ_APP_VERSION_DISPLAY']
 
 DEFINES['APP_LICENSE_BLOCK'] = '%s/content/overrides/app-license.html' % SRCDIR
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk3', 'cocoa'):
     DEFINES['CONTEXT_COPY_IMAGE_CONTENTS'] = 1
 
-if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa', 'gtk3'):
-    DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
-
 if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk3'):
     DEFINES['MENUBAR_CAN_AUTOHIDE'] = 1
 
 JAR_MANIFESTS += ['jar.mn']
--- a/browser/components/customizableui/CustomizeMode.jsm
+++ b/browser/components/customizableui/CustomizeMode.jsm
@@ -97,24 +97,29 @@ function CustomizeMode(aWindow) {
   this.document = aWindow.document;
   this.browser = aWindow.gBrowser;
   this.areas = new Set();
 
   // There are two palettes - there's the palette that can be overlayed with
   // toolbar items in browser.xul. This is invisible, and never seen by the
   // user. Then there's the visible palette, which gets populated and displayed
   // to the user when in customizing mode.
-  this.visiblePalette = this.document.getElementById(kPaletteId);
-  this.pongArena = this.document.getElementById("customization-pong-arena");
-  if (AppConstants.CAN_DRAW_IN_TITLEBAR) {
+  this.visiblePalette = this.$(kPaletteId);
+  this.pongArena = this.$("customization-pong-arena");
+
+  if (this._canDrawInTitlebar()) {
     this._updateTitlebarCheckbox();
     this._updateDragSpaceCheckbox();
     Services.prefs.addObserver(kDrawInTitlebarPref, this);
     Services.prefs.addObserver(kExtraDragSpacePref, this);
+  } else {
+    this.$("customization-titlebar-visibility-checkbox").hidden = true;
+    this.$("customization-extra-drag-space-checkbox").hidden = true;
   }
+
   this.window.addEventListener("unload", this);
 }
 
 CustomizeMode.prototype = {
   _changed: false,
   _transitioning: false,
   window: null,
   document: null,
@@ -133,22 +138,26 @@ CustomizeMode.prototype = {
   _skipSourceNodeCheck: null,
   _mainViewContext: null,
 
   get _handler() {
     return this.window.CustomizationHandler;
   },
 
   uninit() {
-    if (AppConstants.CAN_DRAW_IN_TITLEBAR) {
+    if (this._canDrawInTitlebar()) {
       Services.prefs.removeObserver(kDrawInTitlebarPref, this);
       Services.prefs.removeObserver(kExtraDragSpacePref, this);
     }
   },
 
+  $(id) {
+    return this.document.getElementById(id);
+  },
+
   toggle() {
     if (this._handler.isEnteringCustomizeMode || this._handler.isExitingCustomizeMode) {
       this._wantToBeInCustomizeMode = !this._wantToBeInCustomizeMode;
       return;
     }
     if (this._customizing) {
       this.exit();
     } else {
@@ -1572,80 +1581,70 @@ CustomizeMode.prototype = {
     delete this.paletteDragHandler;
   },
 
   observe(aSubject, aTopic, aData) {
     switch (aTopic) {
       case "nsPref:changed":
         this._updateResetButton();
         this._updateUndoResetButton();
-        if (AppConstants.CAN_DRAW_IN_TITLEBAR) {
+        if (this._canDrawInTitlebar()) {
           this._updateTitlebarCheckbox();
           this._updateDragSpaceCheckbox();
         }
         break;
     }
   },
 
+  _canDrawInTitlebar() {
+    return this.window.TabsInTitlebar.systemSupported;
+  },
+
   _updateTitlebarCheckbox() {
-    if (!AppConstants.CAN_DRAW_IN_TITLEBAR) {
-      return;
-    }
     let drawInTitlebar = Services.prefs.getBoolPref(kDrawInTitlebarPref, true);
-    let checkbox = this.document.getElementById("customization-titlebar-visibility-checkbox");
+    let checkbox = this.$("customization-titlebar-visibility-checkbox");
     // Drawing in the titlebar means 'hiding' the titlebar.
     // We use the attribute rather than a property because if we're not in
     // customize mode the button is hidden and properties don't work.
     if (drawInTitlebar) {
       checkbox.removeAttribute("checked");
     } else {
       checkbox.setAttribute("checked", "true");
     }
   },
 
   _updateDragSpaceCheckbox() {
-    if (!AppConstants.CAN_DRAW_IN_TITLEBAR) {
-      return;
-    }
-
     let extraDragSpace = Services.prefs.getBoolPref(kExtraDragSpacePref);
     let drawInTitlebar = Services.prefs.getBoolPref(kDrawInTitlebarPref, true);
-    let menuBar = this.document.getElementById("toolbar-menubar");
+    let menuBar = this.$("toolbar-menubar");
     let menuBarEnabled = menuBar
       && AppConstants.platform != "macosx"
       && menuBar.getAttribute("autohide") != "true";
 
-    let checkbox = this.document.getElementById("customization-extra-drag-space-checkbox");
+    let checkbox = this.$("customization-extra-drag-space-checkbox");
     if (extraDragSpace) {
       checkbox.setAttribute("checked", "true");
     } else {
       checkbox.removeAttribute("checked");
     }
 
     if (!drawInTitlebar || menuBarEnabled) {
       checkbox.setAttribute("disabled", "true");
     } else {
       checkbox.removeAttribute("disabled");
     }
   },
 
   toggleTitlebar(aShouldShowTitlebar) {
-    if (!AppConstants.CAN_DRAW_IN_TITLEBAR) {
-      return;
-    }
     // Drawing in the titlebar means not showing the titlebar, hence the negation:
     Services.prefs.setBoolPref(kDrawInTitlebarPref, !aShouldShowTitlebar);
     this._updateDragSpaceCheckbox();
   },
 
   toggleDragSpace(aShouldShowDragSpace) {
-    if (!AppConstants.CAN_DRAW_IN_TITLEBAR) {
-      return;
-    }
-
     Services.prefs.setBoolPref(kExtraDragSpacePref, aShouldShowDragSpace);
   },
 
   get _dwu() {
     if (!this.__dwu) {
       this.__dwu = this.window.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
     }
     return this.__dwu;
--- a/browser/components/customizableui/content/customizeMode.inc.xul
+++ b/browser/components/customizableui/content/customizeMode.inc.xul
@@ -23,26 +23,24 @@
             <description id="customization-panelDescription">&customizeMode.overflowList.description;</description>
           </vbox>
           <box class="panel-inner-arrowcontentfooter" hidden="true"/>
         </box>
       </vbox>
     </vbox>
   </box>
   <hbox id="customization-footer">
-#ifdef CAN_DRAW_IN_TITLEBAR
     <checkbox id="customization-titlebar-visibility-checkbox" class="customizationmode-checkbox"
               label="&customizeMode.titlebar;"
 #NB: because oncommand fires after click, by the time we've fired, the checkbox binding
 #    will already have switched the button's state, so this is correct:
               oncommand="gCustomizeMode.toggleTitlebar(this.checked)"/>
     <checkbox id="customization-extra-drag-space-checkbox" class="customizationmode-checkbox"
               label="&customizeMode.extraDragSpace;"
               oncommand="gCustomizeMode.toggleDragSpace(this.checked)"/>
-#endif
     <button id="customization-toolbar-visibility-button" label="&customizeMode.toolbars2;" class="customizationmode-button" type="menu">
       <menupopup id="customization-toolbar-menu" onpopupshowing="onViewToolbarsPopupShowing(event)"/>
     </button>
     <button id="customization-lwtheme-button" label="&customizeMode.lwthemes;" class="customizationmode-button" type="menu">
       <panel type="arrow" id="customization-lwtheme-menu"
              onpopupshowing="gCustomizeMode.onLWThemesMenuShowing(event);"
              position="topcenter bottomleft"
              flip="none"
--- a/browser/components/customizableui/moz.build
+++ b/browser/components/customizableui/moz.build
@@ -15,13 +15,10 @@ EXTRA_JS_MODULES += [
     'CustomizableWidgets.jsm',
     'CustomizeMode.jsm',
     'DragPositionManager.jsm',
     'PanelMultiView.jsm',
     'ScrollbarSampler.jsm',
     'SearchWidgetTracker.jsm',
 ]
 
-if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa'):
-    DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
-
 with Files('**'):
     BUG_COMPONENT = ('Firefox', 'Toolbars and Customization')
--- a/browser/components/preferences/in-content/findInPage.js
+++ b/browser/components/preferences/in-content/findInPage.js
@@ -237,21 +237,22 @@ var gSearchResultsPane = {
         .querySelectorAll("#mainPrefPane > *:not([data-hidden-from-search])")];
 
       if (subQuery) {
         // Since the previous query is a subset of the current query,
         // there is no need to check elements that is hidden already.
         rootPreferencesChildren = rootPreferencesChildren.filter(el => !el.hidden);
       }
 
-      // Mark all the children to check be visible to bind JS, Access Keys, etc,
-      // but don't really show them by setting their visibility to hidden in CSS.
+      // Attach the bindings for all children if they were not already visible.
       for (let child of rootPreferencesChildren) {
-        child.classList.add("visually-hidden");
-        child.hidden = false;
+        if (child.hidden) {
+          child.classList.add("visually-hidden");
+          child.hidden = false;
+        }
       }
 
       let ts = performance.now();
       let FRAME_THRESHOLD = 1000 / 60;
 
       // Showing or Hiding specific section depending on if words in query are found
       for (let child of rootPreferencesChildren) {
         if (performance.now() - ts > FRAME_THRESHOLD) {
@@ -263,29 +264,28 @@ var gSearchResultsPane = {
           if (query !== this.query) {
             return;
           }
         }
 
         if (!child.classList.contains("header") &&
             !child.classList.contains("subcategory") &&
             await this.searchWithinNode(child, this.query)) {
-          child.hidden = false;
           child.classList.remove("visually-hidden");
 
           // Show the preceding search-header if one exists.
           let groupbox = child.closest("groupbox");
           let groupHeader = groupbox && groupbox.querySelector(".search-header");
           if (groupHeader) {
             groupHeader.hidden = false;
           }
 
           resultsFound = true;
         } else {
-          child.hidden = true;
+          child.classList.add("visually-hidden");
         }
       }
 
       noResultsEl.hidden = !!resultsFound;
       noResultsEl.setAttribute("query", this.query);
       // XXX: This is potentially racy in case where Fluent retranslates the
       // message and ereases the query within.
       // The feature is not yet supported, but we should fix for it before
@@ -508,17 +508,17 @@ var gSearchResultsPane = {
    *    Word or words that are being searched for
    */
   createSearchTooltip(anchorNode, query) {
     if (anchorNode.tooltipNode) {
       return;
     }
     let searchTooltip = anchorNode.ownerDocument.createElement("span");
     let searchTooltipText = anchorNode.ownerDocument.createElement("span");
-    searchTooltip.setAttribute("class", "search-tooltip");
+    searchTooltip.className = "search-tooltip";
     searchTooltipText.textContent = query;
     searchTooltip.appendChild(searchTooltipText);
 
     // Set tooltipNode property to track corresponded tooltip node.
     anchorNode.tooltipNode = searchTooltip;
     anchorNode.parentElement.classList.add("search-tooltip-parent");
     anchorNode.parentElement.appendChild(searchTooltip);
 
@@ -530,25 +530,21 @@ var gSearchResultsPane = {
     // In order to get the up-to-date position of each of the nodes that we're
     // putting tooltips on, we have to flush layout intentionally, and that
     // this is the result of a XUL limitation (bug 1363730).
     let tooltipRect = searchTooltip.getBoundingClientRect();
     searchTooltip.style.setProperty("left", `calc(50% - ${(tooltipRect.width / 2)}px)`);
   },
 
   /**
-   * Remove all search tooltips that were created.
+   * Remove all search tooltips.
    */
   removeAllSearchTooltips() {
-    let searchTooltips = Array.from(document.querySelectorAll(".search-tooltip"));
-    for (let searchTooltip of searchTooltips) {
-      searchTooltip.parentElement.classList.remove("search-tooltip-parent");
-      searchTooltip.remove();
-    }
     for (let anchorNode of this.listSearchTooltips) {
+      anchorNode.parentElement.classList.remove("search-tooltip-parent");
       anchorNode.tooltipNode.remove();
       anchorNode.tooltipNode = null;
     }
     this.listSearchTooltips.clear();
   },
 
   /**
    * Remove all indicators on menuitem.
--- a/browser/components/preferences/in-content/preferences.js
+++ b/browser/components/preferences/in-content/preferences.js
@@ -187,27 +187,28 @@ function gotoPref(aCategory) {
           .add(telemetryBucketForCategory(friendlyName));
 }
 
 function search(aQuery, aAttribute) {
   let mainPrefPane = document.getElementById("mainPrefPane");
   let elements = mainPrefPane.children;
   for (let element of elements) {
     // If the "data-hidden-from-search" is "true", the
-    // element will not get considered during search. This
-    // should only be used when an element is still under
-    // development and should not be shown for any reason.
+    // element will not get considered during search.
     if (element.getAttribute("data-hidden-from-search") != "true" ||
         element.getAttribute("data-subpanel") == "true") {
       let attributeValue = element.getAttribute(aAttribute);
       if (attributeValue == aQuery) {
         element.hidden = false;
       } else {
         element.hidden = true;
       }
+    } else if (element.getAttribute("data-hidden-from-search") == "true" &&
+               !element.hidden) {
+      element.hidden = true;
     }
     element.classList.remove("visually-hidden");
   }
 
   let keysets = mainPrefPane.getElementsByTagName("keyset");
   for (let element of keysets) {
     let attributeValue = element.getAttribute(aAttribute);
     if (attributeValue == aQuery)
--- a/browser/components/preferences/in-content/tests/browser.ini
+++ b/browser/components/preferences/in-content/tests/browser.ini
@@ -11,16 +11,17 @@ support-files =
 [browser_applications_selection.js]
 skip-if = os == 'linux' # bug 1382057
 [browser_advanced_update.js]
 skip-if = !updater
 [browser_basic_rebuild_fonts_test.js]
 [browser_bug410900.js]
 [browser_bug705422.js]
 [browser_bug731866.js]
+[browser_search_no_results_change_category.js]
 [browser_search_within_preferences_1.js]
 [browser_search_within_preferences_2.js]
 [browser_search_within_preferences_command.js]
 [browser_search_subdialogs_within_preferences_1.js]
 [browser_search_subdialogs_within_preferences_2.js]
 [browser_search_subdialogs_within_preferences_3.js]
 [browser_search_subdialogs_within_preferences_4.js]
 [browser_search_subdialogs_within_preferences_5.js]
new file mode 100644
--- /dev/null
+++ b/browser/components/preferences/in-content/tests/browser_search_no_results_change_category.js
@@ -0,0 +1,28 @@
+"use strict";
+
+add_task(async function() {
+  await SpecialPowers.pushPrefEnv({"set": [["browser.preferences.search", true]]});
+});
+
+add_task(async function() {
+  await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
+
+  let searchInput = gBrowser.contentDocument.getElementById("searchInput");
+  is(searchInput, gBrowser.contentDocument.activeElement.closest("#searchInput"),
+    "Search input should be focused when visiting preferences");
+  let query = "ffff____noresults____ffff";
+  let searchCompletedPromise = BrowserTestUtils.waitForEvent(
+      gBrowser.contentWindow, "PreferencesSearchCompleted", evt => evt.detail == query);
+  EventUtils.sendString(query);
+  await searchCompletedPromise;
+
+  let noResultsEl = gBrowser.contentDocument.querySelector("#no-results-message");
+  is_element_visible(noResultsEl, "Should be reporting no results for this query");
+
+  let privacyCategory = gBrowser.contentDocument.querySelector("#category-privacy");
+  privacyCategory.click();
+  is_element_hidden(noResultsEl,
+                    "Should not be showing the 'no results' message after selecting a category");
+
+  BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
--- a/browser/extensions/formautofill/content/autofillEditForms.js
+++ b/browser/extensions/formautofill/content/autofillEditForms.js
@@ -3,41 +3,38 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /* exported EditAddress, EditCreditCard */
 /* eslint-disable mozilla/balanced-listeners */ // Not relevant since the document gets unloaded.
 
 "use strict";
 
 class EditAutofillForm {
-  constructor(elements, record) {
+  constructor(elements) {
     this._elements = elements;
-    this._record = record;
   }
 
   /**
    * Fill the form with a record object.
-   * @param  {object} record
+   * @param  {object} [record = {}]
    */
-  loadInitialValues(record) {
-    for (let field in record) {
-      let input = document.getElementById(field);
-      if (input) {
-        input.value = record[field];
-      }
+  loadRecord(record = {}) {
+    for (let field of this._elements.form.elements) {
+      let value = record[field.id];
+      field.value = typeof(value) == "undefined" ? "" : value;
     }
   }
 
   /**
    * Get inputs from the form.
    * @returns {object}
    */
   buildFormObject() {
     return Array.from(this._elements.form.elements).reduce((obj, input) => {
-      if (input.value) {
+      if (input.value && !input.disabled) {
         obj[input.id] = input.value;
       }
       return obj;
     }, {});
   }
 
   /**
    * Handle events
@@ -80,35 +77,43 @@ class EditAddress extends EditAutofillFo
    * @param {HTMLElement[]} elements
    * @param {object} record
    * @param {object} config
    * @param {string[]} config.DEFAULT_REGION
    * @param {function} config.getFormFormat Function to return form layout info for a given country.
    * @param {string[]} config.supportedCountries
    */
   constructor(elements, record, config) {
-    let country = record ? record.country :
-                    config.supportedCountries.find(supported => supported == config.DEFAULT_REGION);
-    super(elements, record || {country});
+    super(elements);
 
     Object.assign(this, config);
     Object.assign(this._elements, {
       addressLevel1Label: this._elements.form.querySelector("#address-level1-container > span"),
       postalCodeLabel: this._elements.form.querySelector("#postal-code-container > span"),
       country: this._elements.form.querySelector("#country"),
     });
 
     this.populateCountries();
     // Need to populate the countries before trying to set the initial country.
     // Also need to use this._record so it has the default country selected.
-    this.loadInitialValues(this._record);
-    this.formatForm(country);
+    this.loadRecord(record);
     this.attachEventListeners();
   }
 
+  loadRecord(record) {
+    this._record = record;
+    if (!record) {
+      record = {
+        country: this.supportedCountries.find(supported => supported == this.DEFAULT_REGION),
+      };
+    }
+    super.loadRecord(record);
+    this.formatForm(record.country);
+  }
+
   /**
    * Format the form based on country. The address-level1 and postal-code labels
    * should be specific to the given country.
    * @param  {string} country
    */
   formatForm(country) {
     const {addressLevel1Label, postalCodeLabel, fieldsOrder} = this.getFormFormat(country);
     this._elements.addressLevel1Label.dataset.localization = addressLevel1Label;
@@ -171,33 +176,43 @@ class EditAddress extends EditAutofillFo
 class EditCreditCard extends EditAutofillForm {
   /**
    * @param {HTMLElement[]} elements
    * @param {object} record with a decrypted cc-number
    * @param {object} config
    * @param {function} config.isCCNumber Function to determine is a string is a valid CC number.
    */
   constructor(elements, record, config) {
-    super(elements, record);
+    super(elements);
 
     Object.assign(this, config);
     Object.assign(this._elements, {
       ccNumber: this._elements.form.querySelector("#cc-number"),
       year: this._elements.form.querySelector("#cc-exp-year"),
     });
+
+    this.loadRecord(record);
+    this.attachEventListeners();
+  }
+
+  loadRecord(record) {
+    // _record must be updated before generateYears is called.
+    this._record = record;
     this.generateYears();
-    this.loadInitialValues(this._record);
-    this.attachEventListeners();
+    super.loadRecord(record);
   }
 
   generateYears() {
     const count = 11;
     const currentYear = new Date().getFullYear();
     const ccExpYear = this._record && this._record["cc-exp-year"];
 
+    // Clear the list
+    this._elements.year.textContent = "";
+
     if (ccExpYear && ccExpYear < currentYear) {
       this._elements.year.appendChild(new Option(ccExpYear));
     }
 
     for (let i = 0; i < count; i++) {
       let year = currentYear + i;
       let option = new Option(year);
       this._elements.year.appendChild(option);
--- a/browser/installer/allowed-dupes.mn
+++ b/browser/installer/allowed-dupes.mn
@@ -142,8 +142,13 @@ res/table-remove-column.gif
 res/table-remove-row-active.gif
 res/table-remove-row-hover.gif
 res/table-remove-row.gif
 res/multilocale.txt
 update.locale
 # Aurora branding
 browser/chrome/browser/content/branding/icon128.png
 browser/chrome/devtools/content/framework/dev-edition-promo/dev-edition-logo.png
+# Bug 1451016 - Nightly-only PaymentRequest & Form Autofill code sharing.
+browser/features/formautofill@mozilla.org/chrome/content/editCreditCard.xhtml
+chrome/toolkit/res/payments/formautofill/editCreditCard.xhtml
+browser/features/formautofill@mozilla.org/chrome/content/autofillEditForms.js
+chrome/toolkit/res/payments/formautofill/autofillEditForms.js
--- a/browser/themes/osx/moz.build
+++ b/browser/themes/osx/moz.build
@@ -3,10 +3,8 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 DIRS += ['communicator']
 
 JAR_MANIFESTS += ['jar.mn']
 
-DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
-
--- a/browser/themes/shared/tabs.inc.css
+++ b/browser/themes/shared/tabs.inc.css
@@ -647,23 +647,21 @@
  * Note that this doesn't perfectly solve the issue (dragged tabs
  * may still resize very slightly) on some DPI settings with uneven
  * scaling factors on Windows, because of bug 477157.
  */
 .tabbrowser-tab::before {
   margin-inline-start: -1px;
 }
 
-%ifdef CAN_DRAW_IN_TITLEBAR
 %ifdef MENUBAR_CAN_AUTOHIDE
 :root[tabsintitlebar]:not([extradragspace]) #toolbar-menubar[autohide=true] + #TabsToolbar > #tabbrowser-tabs > .tabbrowser-tab::after,
 %else
 :root[tabsintitlebar]:not([extradragspace]) .tabbrowser-tab::after,
 %endif
-%endif
 /* Show full height tab separators on hover. */
 .tabbrowser-tab:hover::after,
 #tabbrowser-tabs:not([movingtab]) > .tabbrowser-tab[beforehovered]::after {
   margin-top: var(--tabs-top-border-width);
   margin-bottom: 0;
 }
 
 /* Show full height tab separators on selected tabs. */
--- a/browser/themes/windows/moz.build
+++ b/browser/themes/windows/moz.build
@@ -3,11 +3,10 @@
 # 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/.
 
 DIRS += ['communicator']
 
 JAR_MANIFESTS += ['jar.mn']
 
-DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
 DEFINES['MENUBAR_CAN_AUTOHIDE'] = 1
 
--- a/devtools/client/inspector/animation/test/browser.ini
+++ b/devtools/client/inspector/animation/test/browser.ini
@@ -1,13 +1,14 @@
 [DEFAULT]
 tags = devtools
 subsuite = devtools
 support-files =
   doc_custom_playback_rate.html
+  doc_frame_script.js
   doc_multi_easings.html
   doc_multi_keyframes.html
   doc_multi_timings.html
   doc_simple_animation.html
   head.js
   !/devtools/client/inspector/test/head.js
   !/devtools/client/inspector/test/shared-head.js
   !/devtools/client/shared/test/frame-script-utils.js
--- a/devtools/client/inspector/animation/test/browser_animation_animated-property-list.js
+++ b/devtools/client/inspector/animation/test/browser_animation_animated-property-list.js
@@ -2,52 +2,53 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Test following animated property list test.
 // 1. Existence for animated property list.
 // 2. Number of animated property item.
 
-const TEST_CASES = [
+const TEST_DATA = [
   {
-    target: ".animated",
+    targetClass: "animated",
     expectedNumber: 1,
   },
   {
-    target: ".compositor-notall",
+    targetClass: "compositor-notall",
     expectedNumber: 3,
   },
 ];
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_simple_animation.html");
-  const { inspector, panel } = await openAnimationInspector();
+  await removeAnimatedElementsExcept(TEST_DATA.map(t => `.${ t.targetClass }`));
+  const { animationInspector, panel } = await openAnimationInspector();
 
   info("Checking animated property list and items existence at initial");
   ok(!panel.querySelector(".animated-property-list"),
      "The animated-property-list should not be in the DOM at initial");
 
-  for (const testCase of TEST_CASES) {
-    info(`Checking animated-property-list and items existence at ${ testCase.target }`);
-    const animatedNode = await getNodeFront(testCase.target, inspector);
-    await selectNodeAndWaitForAnimations(animatedNode, inspector);
+  for (const { targetClass, expectedNumber } of TEST_DATA) {
+    info(`Checking animated-property-list and items existence at ${ targetClass }`);
+    await clickOnAnimationByTargetSelector(animationInspector,
+                                           panel, `.${ targetClass }`);
     ok(panel.querySelector(".animated-property-list"),
-       `The animated-property-list should be in the DOM at ${ testCase.target }`);
+      `The animated-property-list should be in the DOM at ${ targetClass }`);
     const itemEls =
       panel.querySelectorAll(".animated-property-list .animated-property-item");
-    is(itemEls.length, testCase.expectedNumber,
-       `The number of animated-property-list should be ${ testCase.expectedNumber } `
-       + `at ${ testCase.target }`);
+    is(itemEls.length, expectedNumber,
+       `The number of animated-property-list should be ${ expectedNumber } ` +
+       `at ${ targetClass }`);
 
     if (itemEls.length < 2) {
       continue;
     }
 
-    info(`Checking the background color for `
-         + `the animated property item at ${ testCase.target }`);
+    info("Checking the background color for " +
+         `the animated property item at ${ targetClass }`);
     const evenColor = panel.ownerGlobal.getComputedStyle(itemEls[0]).backgroundColor;
     const oddColor = panel.ownerGlobal.getComputedStyle(itemEls[1]).backgroundColor;
     isnot(evenColor, oddColor,
-          "Background color of an even animated property item "
-          + "should be different from odd");
+          "Background color of an even animated property item " +
+          "should be different from odd");
   }
 });
--- a/devtools/client/inspector/animation/test/browser_animation_animated-property-list_unchanged-items.js
+++ b/devtools/client/inspector/animation/test/browser_animation_animated-property-list_unchanged-items.js
@@ -18,20 +18,20 @@ const TEST_DATA = [
   { property: "background-size", isUnchanged: true },
   { property: "padding-bottom", isUnchanged: true },
   { property: "padding-right", isUnchanged: true },
   { property: "padding-top", isUnchanged: true },
 ];
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_simple_animation.html");
-  const { inspector, panel } = await openAnimationInspector();
+  await removeAnimatedElementsExcept([".longhand"]);
+  const { panel } = await openAnimationInspector();
 
   info("Checking unchanged animated property item");
-  await selectNodeAndWaitForAnimations(".longhand", inspector);
   const itemEls = panel.querySelectorAll(".animated-property-item");
   is(itemEls.length, TEST_DATA.length,
     `Count of animated property item should be ${ TEST_DATA.length }`);
 
   for (let i = 0; i < TEST_DATA.length; i++) {
     const { property, isUnchanged } = TEST_DATA[i];
     const itemEl = itemEls[i];
 
--- a/devtools/client/inspector/animation/test/browser_animation_animated-property-name.js
+++ b/devtools/client/inspector/animation/test/browser_animation_animated-property-name.js
@@ -19,53 +19,56 @@ const TEST_DATA = [
   },
   {
     property: "width",
   },
 ];
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_simple_animation.html");
-  const { inspector, panel } = await openAnimationInspector();
+  await removeAnimatedElementsExcept([".compositor-notall"]);
+  const { panel } = await openAnimationInspector();
 
   info("Checking animated property name component");
-  await selectNodeAndWaitForAnimations(".compositor-notall", inspector);
-
   const animatedPropertyNameEls = panel.querySelectorAll(".animated-property-name");
   is(animatedPropertyNameEls.length, TEST_DATA.length,
     `Number of animated property name elements should be ${ TEST_DATA.length }`);
 
   for (const [index, animatedPropertyNameEl] of animatedPropertyNameEls.entries()) {
-    const testData = TEST_DATA[index];
+    const {
+      property,
+      isOnCompositor,
+      isWarning,
+    } = TEST_DATA[index];
 
-    info(`Checking text content for ${ testData.property }`);
+    info(`Checking text content for ${ property }`);
 
     const spanEl = animatedPropertyNameEl.querySelector("span");
     ok(spanEl,
-      `<span> element should be in animated-property-name of ${ testData.property }`);
-    is(spanEl.textContent, testData.property,
-      `textContent should be ${ testData.property }`);
+      `<span> element should be in animated-property-name of ${ property }`);
+    is(spanEl.textContent, property,
+      `textContent should be ${ property }`);
 
-    info(`Checking compositor sign for ${ testData.property }`);
+    info(`Checking compositor sign for ${ property }`);
 
-    if (testData.isOnCompositor) {
+    if (isOnCompositor) {
       ok(animatedPropertyNameEl.classList.contains("compositor"),
         "animatedPropertyNameEl should has .compositor class");
       isnot(getComputedStyle(spanEl, "::before").width, "auto",
         "width of ::before pseud should not be auto");
     } else {
       ok(!animatedPropertyNameEl.classList.contains("compositor"),
         "animatedPropertyNameEl should not have .compositor class");
       is(getComputedStyle(spanEl, "::before").width, "auto",
         "width of ::before pseud should be auto");
     }
 
-    info(`Checking warning for ${ testData.property }`);
+    info(`Checking warning for ${ property }`);
 
-    if (testData.isWarning) {
+    if (isWarning) {
       ok(animatedPropertyNameEl.classList.contains("warning"),
         "animatedPropertyNameEl should has .warning class");
       is(getComputedStyle(spanEl).textDecorationStyle, "dotted",
         "text-decoration-style of spanEl should be 'dotted'");
       is(getComputedStyle(spanEl).textDecorationLine, "underline",
         "text-decoration-line of spanEl should be 'underline'");
     } else {
       ok(!animatedPropertyNameEl.classList.contains("warning"),
--- a/devtools/client/inspector/animation/test/browser_animation_animation-detail_close-button.js
+++ b/devtools/client/inspector/animation/test/browser_animation_animation-detail_close-button.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Test that whether close button in header of animation detail works.
 
 add_task(async function() {
-  await addTab(URL_ROOT + "doc_multi_timings.html");
+  await addTab(URL_ROOT + "doc_custom_playback_rate.html");
   const { animationInspector, panel } = await openAnimationInspector();
 
   info("Checking close button in header of animation detail");
   await clickOnAnimation(animationInspector, panel, 0);
   const detailEl = panel.querySelector("#animation-container .controlled");
   const win = panel.ownerGlobal;
   isnot(win.getComputedStyle(detailEl).display, "none",
     "detailEl should be visibled before clicking close button");
--- a/devtools/client/inspector/animation/test/browser_animation_animation-detail_title.js
+++ b/devtools/client/inspector/animation/test/browser_animation_animation-detail_title.js
@@ -1,37 +1,38 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Test that whether title in header of animations detail.
 
-const TEST_CASES = [
+const TEST_DATA = [
   {
-    target: ".cssanimation-normal",
+    targetClass: "cssanimation-normal",
     expectedTitle: "cssanimation - CSS Animation",
   },
   {
-    target: ".delay-positive",
+    targetClass: "delay-positive",
     expectedTitle: "test-delay-animation - Script Animation",
   },
   {
-    target: ".easing-step",
+    targetClass: "easing-step",
     expectedTitle: "Script Animation",
   },
 ];
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_multi_timings.html");
-  const { inspector, panel } = await openAnimationInspector();
+  await removeAnimatedElementsExcept(TEST_DATA.map(t => `.${ t.targetClass }`));
+  const { animationInspector, panel } = await openAnimationInspector();
 
   info("Checking title in each header of animation detail");
 
-  for (const testCase of TEST_CASES) {
-    info(`Checking title at ${ testCase.target }`);
-    const animatedNode = await getNodeFront(testCase.target, inspector);
-    await selectNodeAndWaitForAnimations(animatedNode, inspector);
+  for (const { targetClass, expectedTitle } of TEST_DATA) {
+    info(`Checking title at ${ targetClass }`);
+    await clickOnAnimationByTargetSelector(animationInspector,
+                                           panel, `.${ targetClass }`);
     const titleEl = panel.querySelector(".animation-detail-title");
-    is(titleEl.textContent, testCase.expectedTitle,
-       `Title of "${ testCase.target }" should be "${ testCase.expectedTitle }"`);
+    is(titleEl.textContent, expectedTitle,
+      `Title of "${ targetClass }" should be "${ expectedTitle }"`);
   }
 });
--- a/devtools/client/inspector/animation/test/browser_animation_animation-detail_visibility.js
+++ b/devtools/client/inspector/animation/test/browser_animation_animation-detail_visibility.js
@@ -1,19 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Test that whether animations detail could be displayed if there is selected animation.
 
-requestLongerTimeout(2);
-
 add_task(async function() {
-  await addTab(URL_ROOT + "doc_multi_timings.html");
+  await addTab(URL_ROOT + "doc_custom_playback_rate.html");
   const { animationInspector, inspector, panel } = await openAnimationInspector();
 
   info("Checking animation detail visibility if animation was unselected");
   const detailEl = panel.querySelector("#animation-container .controlled");
   ok(detailEl, "The detail pane should be in the DOM");
   const win = panel.ownerGlobal;
   is(win.getComputedStyle(detailEl).display, "none", "detailEl should be unvisibled");
 
@@ -22,12 +20,12 @@ add_task(async function() {
   isnot(win.getComputedStyle(detailEl).display, "none", "detailEl should be visibled");
 
   info("Checking animation detail visibility when choose node which has animations");
   await selectNodeAndWaitForAnimations("html", inspector);
   is(win.getComputedStyle(detailEl).display, "none",
     "detailEl should be unvisibled after choose html node");
 
   info("Checking animation detail visibility when choose node which has an animation");
-  await selectNodeAndWaitForAnimations(".cssanimation-normal", inspector);
+  await selectNodeAndWaitForAnimations("div", inspector);
   isnot(win.getComputedStyle(detailEl).display, "none",
     "detailEl should be visibled after choose .cssanimation-normal node");
 });
--- a/devtools/client/inspector/animation/test/browser_animation_animation-list.js
+++ b/devtools/client/inspector/animation/test/browser_animation_animation-list.js
@@ -2,33 +2,32 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Test that whether animations ui could be displayed
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_simple_animation.html");
-
+  await removeAnimatedElementsExcept([".animated", ".long"]);
   const { animationInspector, inspector, panel } = await openAnimationInspector();
 
   info("Checking animation list and items existence");
   ok(panel.querySelector(".animation-list"),
-     "The animation-list is in the DOM");
+    "The animation-list is in the DOM");
   is(panel.querySelectorAll(".animation-list .animation-item").length,
      animationInspector.state.animations.length,
      "The number of animations displayed matches the number of animations");
 
   info("Checking the background color for the animation list items");
   const animationItemEls = panel.querySelectorAll(".animation-list .animation-item");
   const evenColor =
     panel.ownerGlobal.getComputedStyle(animationItemEls[0]).backgroundColor;
   const oddColor =
     panel.ownerGlobal.getComputedStyle(animationItemEls[1]).backgroundColor;
   isnot(evenColor, oddColor,
-        "Background color of an even animation should be different from odd");
+    "Background color of an even animation should be different from odd");
 
   info("Checking list and items existence after select a element which has an animation");
-  const animatedNode = await getNodeFront(".animated", inspector);
-  await selectNodeAndWaitForAnimations(animatedNode, inspector);
+  await selectNodeAndWaitForAnimations(".animated", inspector);
   is(panel.querySelectorAll(".animation-list .animation-item").length, 1,
-     "The number of animations displayed should be 1 for .animated element");
+    "The number of animations displayed should be 1 for .animated element");
 });
--- a/devtools/client/inspector/animation/test/browser_animation_animation-target.js
+++ b/devtools/client/inspector/animation/test/browser_animation_animation-target.js
@@ -5,31 +5,31 @@
 
 // Test for following AnimationTarget component works.
 // * element existance
 // * number of elements
 // * content of element
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_simple_animation.html");
+  await removeAnimatedElementsExcept([".animated", ".long"]);
   const { animationInspector, inspector, panel } = await openAnimationInspector();
 
   info("Checking the animation target elements existance");
   const animationItemEls = panel.querySelectorAll(".animation-list .animation-item");
   is(animationItemEls.length, animationInspector.state.animations.length,
-     "Number of animation target element should be same to number of animations "
-     + "that displays");
+     "Number of animation target element should be same to number of animations " +
+     "that displays");
 
   for (const animationItemEl of animationItemEls) {
     const animationTargetEl = animationItemEl.querySelector(".animation-target");
     ok(animationTargetEl,
-       "The animation target element should be in each animation item element");
+      "The animation target element should be in each animation item element");
   }
 
   info("Checking the content of animation target");
   await selectNodeAndWaitForAnimations(".animated", inspector);
   const animationTargetEl =
     panel.querySelector(".animation-list .animation-item .animation-target");
   is(animationTargetEl.textContent, "div.ball.animated",
-     "The target element's content is correct");
-  ok(animationTargetEl.querySelector(".objectBox"),
-     "objectBox is in the page exists");
+    "The target element's content is correct");
+  ok(animationTargetEl.querySelector(".objectBox"), "objectBox is in the page exists");
 });
--- a/devtools/client/inspector/animation/test/browser_animation_animation-timeline-tick.js
+++ b/devtools/client/inspector/animation/test/browser_animation_animation-timeline-tick.js
@@ -13,16 +13,17 @@ const { findOptimalTimeInterval } =
   require("devtools/client/inspector/animation/utils/utils");
 
 // Should be kept in sync with TIME_GRADUATION_MIN_SPACING in
 // AnimationTimeTickList component.
 const TIME_GRADUATION_MIN_SPACING = 40;
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_simple_animation.html");
+  await removeAnimatedElementsExcept([".end-delay", ".negative-delay"]);
   const { animationInspector, inspector, panel } = await openAnimationInspector();
   const timeScale = new TimeScale(animationInspector.state.animations);
 
   info("Checking animation list header element existence");
   const listContainerEl = panel.querySelector(".animation-list-container");
   const listHeaderEl = listContainerEl.querySelector(".devtools-toolbar");
   ok(listHeaderEl, "The header element should be in animation list container element");
 
@@ -44,37 +45,37 @@ add_task(async function() {
  *
  * @param {TimeScale} - timeScale
  * @param {Element} - listHeaderEl which is header element
  */
 function assertTimelineTickItems(timeScale, listHeaderEl) {
   const animationTimelineTickListEl =
     listHeaderEl.querySelector(".animation-timeline-tick-list");
   ok(animationTimelineTickListEl,
-     "The animation timeline tick list element should be in header");
+    "The animation timeline tick list element should be in header");
 
   const width = animationTimelineTickListEl.offsetWidth;
   const animationDuration = timeScale.getDuration();
   const minTimeInterval = TIME_GRADUATION_MIN_SPACING * animationDuration / width;
   const interval = findOptimalTimeInterval(minTimeInterval);
   const expectedTickItem = Math.ceil(animationDuration / interval);
 
   const timelineTickItemEls =
     listHeaderEl.querySelectorAll(".animation-timeline-tick-item");
   is(timelineTickItemEls.length, expectedTickItem,
-     "The expected number of timeline ticks were found");
+    "The expected number of timeline ticks were found");
 
   info("Make sure graduations are evenly distributed and show the right times");
   for (const [index, tickEl] of timelineTickItemEls.entries()) {
     const left = parseFloat(tickEl.style.left);
     const expectedPos = index * interval * 100 / animationDuration;
     is(Math.round(left), Math.round(expectedPos),
-       `Graduation ${ index } is positioned correctly`);
+      `Graduation ${ index } is positioned correctly`);
 
     // Note that the distancetoRelativeTime and formatTime functions are tested
     // separately in xpcshell test test_timeScale.js, so we assume that they
     // work here.
     const formattedTime =
       timeScale.formatTime(timeScale.distanceToRelativeTime(expectedPos, width));
     is(tickEl.textContent, formattedTime,
-       `Graduation ${ index } has the right text content`);
+      `Graduation ${ index } has the right text content`);
   }
 }
--- a/devtools/client/inspector/animation/test/browser_animation_current-time-label.js
+++ b/devtools/client/inspector/animation/test/browser_animation_current-time-label.js
@@ -4,24 +4,24 @@
 "use strict";
 
 // Test for following CurrentTimeLabel component:
 // * element existence
 // * label content at plural timing
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_multi_timings.html");
-  const { animationInspector, inspector, panel } = await openAnimationInspector();
+  await removeAnimatedElementsExcept([".keyframes-easing-step"]);
+  const { animationInspector, panel } = await openAnimationInspector();
 
   info("Checking current time label existence");
   const labelEl = panel.querySelector(".current-time-label");
   ok(labelEl, "current time label should exist");
 
   info("Checking current time label content");
-  await selectNodeAndWaitForAnimations(".keyframes-easing-step", inspector);
   await clickOnCurrentTimeScrubberController(animationInspector, panel, 0.5);
   assertLabelContent(labelEl, animationInspector.state.animations[0].state.currentTime);
   await clickOnCurrentTimeScrubberController(animationInspector, panel, 0.2);
   assertLabelContent(labelEl, animationInspector.state.animations[0].state.currentTime);
 
   info("Checking current time label content during running");
   // Resume
   await clickOnPauseResumeButton(animationInspector, panel);
@@ -45,16 +45,17 @@ function formatStopwatchTime(time) {
   let milliseconds = parseInt(time % 1000, 10);
   let seconds = parseInt((time / 1000) % 60, 10);
   let minutes = parseInt((time / (1000 * 60)), 10);
 
   let pad = (nb, max) => {
     if (nb < max) {
       return new Array((max + "").length - (nb + "").length + 1).join("0") + nb;
     }
+
     return nb;
   };
 
   minutes = pad(minutes, 10);
   seconds = pad(seconds, 10);
   milliseconds = pad(milliseconds, 100);
 
   return `${minutes}:${seconds}.${milliseconds}`;
--- a/devtools/client/inspector/animation/test/browser_animation_current-time-scrubber.js
+++ b/devtools/client/inspector/animation/test/browser_animation_current-time-scrubber.js
@@ -6,28 +6,28 @@
 // Test for following CurrentTimeScrubber and CurrentTimeScrubberController components:
 // * element existence
 // * scrubber position validity
 // * make animations currentTime to change by click on the controller
 // * mouse drag on the scrubber
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_simple_animation.html");
-  const { animationInspector, inspector, panel } = await openAnimationInspector();
+  await removeAnimatedElementsExcept([".long"]);
+  const { animationInspector, panel } = await openAnimationInspector();
 
   info("Checking scrubber controller existence");
   const controllerEl = panel.querySelector(".current-time-scrubber-controller");
   ok(controllerEl, "scrubber controller should exist");
 
   info("Checking scrubber existence");
   const scrubberEl = controllerEl.querySelector(".current-time-scrubber");
   ok(scrubberEl, "scrubber should exist");
 
   info("Checking scrubber changes current time of animation and the position");
-  await selectNodeAndWaitForAnimations(".long", inspector);
   const duration = animationInspector.state.timeScale.getDuration();
   await clickOnCurrentTimeScrubberController(animationInspector, panel, 0);
   assertAnimationsCurrentTime(animationInspector, 0);
   assertPosition(scrubberEl, controllerEl, 0, animationInspector);
 
   await clickOnCurrentTimeScrubberController(animationInspector, panel, 1);
   assertAnimationsCurrentTime(animationInspector, duration);
   assertPosition(scrubberEl, controllerEl, duration, animationInspector);
--- a/devtools/client/inspector/animation/test/browser_animation_empty_on_invalid_nodes.js
+++ b/devtools/client/inspector/animation/test/browser_animation_empty_on_invalid_nodes.js
@@ -1,34 +1,32 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 "use strict";
 
-requestLongerTimeout(2);
-
 // Test that the panel shows no animation data for invalid or not animated nodes
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_simple_animation.html");
-
+  await removeAnimatedElementsExcept([".animated", ".long", ".still"]);
   const { inspector, panel } = await openAnimationInspector();
 
   info("Checking animation list and error message existence for a still node");
   const stillNode = await getNodeFront(".still", inspector);
   await selectNodeAndWaitForAnimations(stillNode, inspector);
 
   ok(panel.querySelector(".animation-error-message"),
      "Element which has animation-error-message class should exist for a still node");
   is(panel.querySelector(".animation-error-message > p").textContent,
      ANIMATION_L10N.getStr("panel.noAnimation"),
      "The correct error message is displayed");
   ok(!panel.querySelector(".animation-list"),
-     "Element which has animations class should not exist for a still node");
+    "Element which has animations class should not exist for a still node");
 
   info("Checking animation list and error message existence for a text node");
   const commentNode = await inspector.walker.previousSibling(stillNode);
   await selectNodeAndWaitForAnimations(commentNode, inspector);
 
   ok(panel.querySelector(".animation-error-message"),
-     "Element which has animation-error-message class should exist for a text node");
+    "Element which has animation-error-message class should exist for a text node");
   ok(!panel.querySelector(".animation-list"),
-     "Element which has animations class should not exist for a text node");
+    "Element which has animations class should not exist for a text node");
 });
--- a/devtools/client/inspector/animation/test/browser_animation_keyframes-graph_computed-value-path.js
+++ b/devtools/client/inspector/animation/test/browser_animation_keyframes-graph_computed-value-path.js
@@ -4,21 +4,19 @@
 "use strict";
 
 // Test for following ComputedValuePath component:
 // * element existence
 // * path segments
 // * fill color by animation type
 // * stop color if the animation type is color
 
-requestLongerTimeout(2);
-
 const TEST_DATA = [
   {
-    targetName: "multi-types",
+    targetClass: "multi-types",
     properties: [
       {
         name: "background-color",
         computedValuePathClass: "color-path",
         expectedPathSegments: [
           { x: 0, y: 0 },
           { x: 0, y: 100 },
           { x: 1000, y: 100 },
@@ -82,17 +80,17 @@ const TEST_DATA = [
           { x: 0, y: 0 },
           { x: 500, y: 50 },
           { x: 1000, y: 100 },
         ],
       },
     ],
   },
   {
-    targetName: "multi-types-reverse",
+    targetClass: "multi-types-reverse",
     properties: [
       {
         name: "background-color",
         computedValuePathClass: "color-path",
         expectedPathSegments: [
           { x: 0, y: 0 },
           { x: 0, y: 100 },
           { x: 1000, y: 100 },
@@ -156,17 +154,17 @@ const TEST_DATA = [
           { x: 0, y: 100 },
           { x: 500, y: 50 },
           { x: 1000, y: 0 },
         ],
       },
     ],
   },
   {
-    targetName: "middle-keyframe",
+    targetClass: "middle-keyframe",
     properties: [
       {
         name: "background-color",
         computedValuePathClass: "color-path",
         expectedPathSegments: [
           { x: 0, y: 0 },
           { x: 0, y: 100 },
           { x: 500, y: 100 },
@@ -244,17 +242,17 @@ const TEST_DATA = [
           { x: 500, y: 100 },
           { x: 750, y: 50 },
           { x: 1000, y: 0 },
         ],
       },
     ],
   },
   {
-    targetName: "steps-keyframe",
+    targetClass: "steps-keyframe",
     properties: [
       {
         name: "background-color",
         computedValuePathClass: "color-path",
         expectedPathSegments: [
           { x: 0, y: 0 },
           { x: 0, y: 100 },
           { x: 500, y: 100 },
@@ -330,33 +328,33 @@ const TEST_DATA = [
           { x: 500, y: 50 },
           { x: 1000, y: 50 },
           { x: 1000, y: 100 },
         ],
       },
     ],
   },
   {
-    targetName: "steps-effect",
+    targetClass: "steps-effect",
     properties: [
       {
         name: "opacity",
         computedValuePathClass: "distance-path",
         expectedPathSegments: [
           { x: 0, y: 0 },
           { x: 250, y: 25 },
           { x: 500, y: 50 },
           { x: 750, y: 75 },
           { x: 1000, y: 100 },
         ],
       },
     ],
   },
   {
-    targetName: "frames-keyframe",
+    targetClass: "frames-keyframe",
     properties: [
       {
         name: "opacity",
         computedValuePathClass: "distance-path",
         expectedPathSegments: [
           { x: 0, y: 0 },
           { x: 199, y: 0 },
           { x: 200, y: 25 },
@@ -367,17 +365,17 @@ const TEST_DATA = [
           { x: 799, y: 75 },
           { x: 800, y: 100 },
           { x: 1000, y: 100 },
         ],
       },
     ],
   },
   {
-    targetName: "narrow-offsets",
+    targetClass: "narrow-offsets",
     properties: [
       {
         name: "opacity",
         computedValuePathClass: "distance-path",
         expectedPathSegments: [
           { x: 0, y: 0 },
           { x: 100, y: 100 },
           { x: 110, y: 100 },
@@ -386,17 +384,17 @@ const TEST_DATA = [
           { x: 129.9, y: 50 },
           { x: 130, y: 0 },
           { x: 1000, y: 100 },
         ],
       },
     ],
   },
   {
-    targetName: "duplicate-offsets",
+    targetClass: "duplicate-offsets",
     properties: [
       {
         name: "opacity",
         computedValuePathClass: "distance-path",
         expectedPathSegments: [
           { x: 0, y: 100 },
           { x: 250, y: 100 },
           { x: 499, y: 100 },
@@ -407,32 +405,32 @@ const TEST_DATA = [
         ],
       },
     ],
   },
 ];
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_multi_keyframes.html");
-
-  const { inspector, panel } = await openAnimationInspector();
+  const { animationInspector, panel } = await openAnimationInspector();
 
-  for (const { properties, targetName } of TEST_DATA) {
-    info(`Checking keyframes graph for ${ targetName }`);
-    await selectNodeAndWaitForAnimations(`#${ targetName }`, inspector);
+  for (const { properties, targetClass } of TEST_DATA) {
+    info(`Checking keyframes graph for ${ targetClass }`);
+    await clickOnAnimationByTargetSelector(animationInspector,
+                                           panel, `.${ targetClass }`);
 
     for (const property of properties) {
       const {
         name,
         computedValuePathClass,
         expectedPathSegments,
         expectedStopColors,
       } = property;
 
-      const testTarget = `${ name } in ${ targetName }`;
+      const testTarget = `${ name } in ${ targetClass }`;
       info(`Checking keyframes graph for ${ testTarget }`);
       info(`Checking keyframes graph path existence for ${ testTarget }`);
       const keyframesGraphPathEl = panel.querySelector(`.${ name }`);
       ok(keyframesGraphPathEl,
         `The keyframes graph path element of ${ testTarget } should be existence`);
 
       info(`Checking computed value path existence for ${ testTarget }`);
       const computedValuePathEl =
--- a/devtools/client/inspector/animation/test/browser_animation_keyframes-graph_computed-value-path_easing-hint.js
+++ b/devtools/client/inspector/animation/test/browser_animation_keyframes-graph_computed-value-path_easing-hint.js
@@ -5,17 +5,17 @@
 
 // Test for following easing hint in ComputedValuePath.
 // * element existence
 // * path segments
 // * hint text
 
 const TEST_DATA = [
   {
-    targetName: "no-easing",
+    targetClass: "no-easing",
     properties: [
       {
         name: "opacity",
         expectedHints: [
           {
             hint: "linear",
             path: [
               { x: 0, y: 100 },
@@ -23,17 +23,17 @@ const TEST_DATA = [
               { x: 1000, y: 0 },
             ],
           },
         ],
       },
     ],
   },
   {
-    targetName: "effect-easing",
+    targetClass: "effect-easing",
     properties: [
       {
         name: "opacity",
         expectedHints: [
           {
             hint: "linear",
             path: [
               { x: 0, y: 100 },
@@ -41,17 +41,17 @@ const TEST_DATA = [
               { x: 1000, y: 0 },
             ],
           },
         ],
       },
     ],
   },
   {
-    targetName: "keyframe-easing",
+    targetClass: "keyframe-easing",
     properties: [
       {
         name: "opacity",
         expectedHints: [
           {
             hint: "steps(2)",
             path: [
               { x: 0, y: 100 },
@@ -61,17 +61,17 @@ const TEST_DATA = [
               { x: 1000, y: 0 },
             ],
           },
         ],
       },
     ],
   },
   {
-    targetName: "both-easing",
+    targetClass: "both-easing",
     properties: [
       {
         name: "margin-left",
         expectedHints: [
           {
             hint: "steps(1)",
             path: [
               { x: 0, y: 0 },
@@ -94,17 +94,17 @@ const TEST_DATA = [
               { x: 1000, y: 0 },
             ],
           },
         ],
       },
     ],
   },
   {
-    targetName: "narrow-keyframes",
+    targetClass: "narrow-keyframes",
     properties: [
       {
         name: "opacity",
         expectedHints: [
           {
             hint: "linear",
             path: [
               { x: 0, y: 0 },
@@ -125,17 +125,17 @@ const TEST_DATA = [
               { x: 1000, y: 100 },
             ],
           },
         ],
       },
     ],
   },
   {
-    targetName: "duplicate-keyframes",
+    targetClass: "duplicate-keyframes",
     properties: [
       {
         name: "opacity",
         expectedHints: [
           {
             hint: "linear",
             path: [
               { x: 0, y: 0 },
@@ -157,17 +157,17 @@ const TEST_DATA = [
               { x: 1000, y: 100 },
             ],
           },
         ],
       },
     ],
   },
   {
-    targetName: "color-keyframes",
+    targetClass: "color-keyframes",
     properties: [
       {
         name: "color",
         expectedHints: [
           {
             hint: "ease-in",
             rect: {
               x: 0,
@@ -186,36 +186,32 @@ const TEST_DATA = [
         ],
       },
     ],
   },
 ];
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_multi_easings.html");
-
-  const { inspector, panel } = await openAnimationInspector();
-
-  for (const { properties, targetName } of TEST_DATA) {
-    info(`Checking keyframes graph for ${ targetName }`);
-    await selectNodeAndWaitForAnimations(`#${ targetName }`, inspector);
+  await removeAnimatedElementsExcept(TEST_DATA.map(t => `.${ t.targetClass }`));
+  const { animationInspector, panel } = await openAnimationInspector();
 
-    for (const property of properties) {
-      const {
-        name,
-        expectedHints,
-      } = property;
+  for (const { properties, targetClass } of TEST_DATA) {
+    info(`Checking keyframes graph for ${ targetClass }`);
+    await clickOnAnimationByTargetSelector(animationInspector,
+                                           panel, `.${ targetClass }`);
 
-      const testTarget = `${ name } in ${ targetName }`;
+    for (const { name, expectedHints } of properties) {
+      const testTarget = `${ name } in ${ targetClass }`;
       info(`Checking easing hint for ${ testTarget }`);
       info(`Checking easing hint existence for ${ testTarget }`);
       const hintEls = panel.querySelectorAll(`.${ name } .hint`);
       is(hintEls.length, expectedHints.length,
-        `Count of easing hint elements of ${ testTarget } `
-        + `should be ${ expectedHints.length }`);
+        `Count of easing hint elements of ${ testTarget } ` +
+        `should be ${ expectedHints.length }`);
 
       for (let i = 0; i < expectedHints.length; i++) {
         const hintTarget = `hint[${ i }] of ${ testTarget }`;
 
         info(`Checking ${ hintTarget }`);
         const hintEl = hintEls[i];
         const expectedHint = expectedHints[i];
 
@@ -243,22 +239,22 @@ add_task(async function() {
         }
 
         info(`Checking interaction for ${ hintTarget }`);
         interactionEl.scrollIntoView(false);
         const win = hintEl.ownerGlobal;
         // Mouse out once from pathEl.
         EventUtils.synthesizeMouse(interactionEl, -1, -1, { type: "mouseout" }, win);
         is(win.getComputedStyle(interactionEl).strokeOpacity, 0,
-          `stroke-opacity of hintEl for ${ hintTarget } should be 0`
-          + " while mouse is out from the element");
+          `stroke-opacity of hintEl for ${ hintTarget } should be 0` +
+          " while mouse is out from the element");
         // Mouse over the pathEl.
         ok(isStrokeChangedByMouseOver(interactionEl, win),
-          `stroke-opacity of hintEl for ${ hintTarget } should be 1`
-          + " while mouse is over the element");
+          `stroke-opacity of hintEl for ${ hintTarget } should be 1` +
+          " while mouse is over the element");
       }
     }
   }
 });
 
 function isStrokeChangedByMouseOver(pathEl, win) {
   const boundingBox = pathEl.getBoundingClientRect();
   const x = boundingBox.width / 2;
--- a/devtools/client/inspector/animation/test/browser_animation_keyframes-graph_keyframe-marker.js
+++ b/devtools/client/inspector/animation/test/browser_animation_keyframes-graph_keyframe-marker.js
@@ -5,17 +5,17 @@
 
 // Test for following keyframe marker.
 // * element existence
 // * title
 // * and left style
 
 const TEST_DATA = [
   {
-    targetName: "multi-types",
+    targetClass: "multi-types",
     properties: [
       {
         name: "background-color",
         expectedValues: [
           {
             title: "rgb(255, 0, 0)",
             left: "0%",
           },
@@ -101,17 +101,17 @@ const TEST_DATA = [
             title: "translate(100px)",
             left: "100%",
           }
         ],
       },
     ],
   },
   {
-    targetName: "narrow-offsets",
+    targetClass: "narrow-offsets",
     properties: [
       {
         name: "opacity",
         expectedValues: [
           {
             title: "0",
             left: "0%",
           },
@@ -130,47 +130,43 @@ const TEST_DATA = [
         ],
       },
     ],
   }
 ];
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_multi_keyframes.html");
-
-  const { inspector, panel } = await openAnimationInspector();
-
-  for (const { properties, targetName } of TEST_DATA) {
-    info(`Checking keyframe marker for ${ targetName }`);
-    await selectNodeAndWaitForAnimations(`#${ targetName }`, inspector);
+  await removeAnimatedElementsExcept(TEST_DATA.map(t => `.${ t.targetClass }`));
+  const { animationInspector, panel } = await openAnimationInspector();
 
-    for (const property of properties) {
-      const {
-        name,
-        expectedValues,
-      } = property;
+  for (const { properties, targetClass } of TEST_DATA) {
+    info(`Checking keyframe marker for ${ targetClass }`);
+    await clickOnAnimationByTargetSelector(animationInspector,
+                                           panel, `.${ targetClass }`);
 
-      const testTarget = `${ name } in ${ targetName }`;
+    for (const { name, expectedValues } of properties) {
+      const testTarget = `${ name } in ${ targetClass }`;
       info(`Checking keyframe marker for ${ testTarget }`);
       info(`Checking keyframe marker existence for ${ testTarget }`);
       const markerEls = panel.querySelectorAll(`.${ name } .keyframe-marker-item`);
       is(markerEls.length, expectedValues.length,
-        `Count of keyframe marker elements of ${ testTarget } `
-        + `should be ${ expectedValues.length }`);
+        `Count of keyframe marker elements of ${ testTarget } ` +
+        `should be ${ expectedValues.length }`);
 
       for (let i = 0; i < expectedValues.length; i++) {
         const hintTarget = `.keyframe-marker-item[${ i }] of ${ testTarget }`;
 
         info(`Checking ${ hintTarget }`);
         const markerEl = markerEls[i];
         const expectedValue = expectedValues[i];
 
         info(`Checking title in ${ hintTarget }`);
         is(markerEl.getAttribute("title"), expectedValue.title,
-          `title in ${ hintTarget } should be ${ expectedValue.title }`);
+         `title in ${ hintTarget } should be ${ expectedValue.title }`);
 
         info(`Checking left style in ${ hintTarget }`);
         is(markerEl.style.left, expectedValue.left,
-          `left in ${ hintTarget } should be ${ expectedValue.left }`);
+         `left in ${ hintTarget } should be ${ expectedValue.left }`);
       }
     }
   }
 });
--- a/devtools/client/inspector/animation/test/browser_animation_keyframes-progress-bar.js
+++ b/devtools/client/inspector/animation/test/browser_animation_keyframes-progress-bar.js
@@ -4,80 +4,84 @@ http://creativecommons.org/publicdomain/
 "use strict";
 
 // Test for following KeyframesProgressBar:
 // * element existence
 // * progress bar position in multi effect timings
 // * progress bar position after changing playback rate
 // * progress bar position when select another animation
 
-requestLongerTimeout(5);
+requestLongerTimeout(2);
 
-const POSITION_TESTCASES = [
+const TEST_DATA = [
   {
-    targetClassName: "cssanimation-linear",
+    targetClass: "cssanimation-linear",
     scrubberPositions: [0, 0.25, 0.5, 0.75, 1],
     expectedPositions: [0, 0.25, 0.5, 0.75, 0],
   },
   {
-    targetClassName: "easing-step",
+    targetClass: "easing-step",
     scrubberPositions: [0, 0.49, 0.5, 0.99],
     expectedPositions: [0, 0, 0.5, 0.5],
   },
   {
-    targetClassName: "delay-positive",
+    targetClass: "delay-positive",
     scrubberPositions: [0, 0.33, 0.5],
     expectedPositions: [0, 0, 0.25],
   },
   {
-    targetClassName: "delay-negative",
+    targetClass: "delay-negative",
     scrubberPositions: [0, 0.49, 0.5, 0.75],
     expectedPositions: [0, 0, 0.5, 0.75],
   },
   {
-    targetClassName: "enddelay-positive",
+    targetClass: "enddelay-positive",
     scrubberPositions: [0, 0.66, 0.67, 0.99],
     expectedPositions: [0, 0.99, 0, 0],
   },
   {
-    targetClassName: "enddelay-negative",
+    targetClass: "enddelay-negative",
     scrubberPositions: [0, 0.49, 0.5, 0.99],
     expectedPositions: [0, 0.49, 0, 0],
   },
   {
-    targetClassName: "direction-reverse-with-iterations-infinity",
+    targetClass: "direction-reverse-with-iterations-infinity",
     scrubberPositions: [0, 0.25, 0.5, 0.75, 1],
     expectedPositions: [1, 0.75, 0.5, 0.25, 1],
   },
   {
-    targetClassName: "fill-both-width-delay-iterationstart",
+    targetClass: "fill-both-width-delay-iterationstart",
     scrubberPositions: [0, 0.33, 0.66, 0.833, 1],
     expectedPositions: [0.5, 0.5, 0.99, 0.25, 0.5],
   },
 ];
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_multi_timings.html");
+  await removeAnimatedElementsExcept(TEST_DATA.map(t => `.${ t.targetClass }`));
   const { animationInspector, inspector, panel } = await openAnimationInspector();
 
   info("Checking progress bar position in multi effect timings");
 
-  for (const testcase of POSITION_TESTCASES) {
-    info(`Checking progress bar position for ${ testcase.targetClassName }`);
-    await selectNodeAndWaitForAnimations(`.${ testcase.targetClassName }`, inspector);
+  for (const testdata of TEST_DATA) {
+    const {
+      targetClass,
+      scrubberPositions,
+      expectedPositions,
+    } = testdata;
+
+    info(`Checking progress bar position for ${ targetClass }`);
+    await selectNodeAndWaitForAnimations(`.${ targetClass }`, inspector);
 
     info("Checking progress bar existence");
     const areaEl = panel.querySelector(".keyframes-progress-bar-area");
     ok(areaEl, "progress bar area should exist");
     const barEl = areaEl.querySelector(".keyframes-progress-bar");
     ok(barEl, "progress bar should exist");
 
-    const scrubberPositions = testcase.scrubberPositions;
-    const expectedPositions = testcase.expectedPositions;
-
     for (let i = 0; i < scrubberPositions.length; i++) {
       info(`Scrubber position is ${ scrubberPositions[i] }`);
       await clickOnCurrentTimeScrubberController(animationInspector,
                                                  panel, scrubberPositions[i]);
       assertPosition(barEl, areaEl, expectedPositions[i], animationInspector);
     }
   }
 });
--- a/devtools/client/inspector/animation/test/browser_animation_logic_auto-stop.js
+++ b/devtools/client/inspector/animation/test/browser_animation_logic_auto-stop.js
@@ -7,16 +7,17 @@
 // after end of animation duration except iterations infinity.
 // Test followings:
 // * state of animations and UI components after end of animation duration
 // * state of animations and UI components after end of animation duration
 //   but iteration count is infinity
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_simple_animation.html");
+  await removeAnimatedElementsExcept([".compositor-all", ".long"]);
   const { animationInspector, inspector, panel } = await openAnimationInspector();
 
   info("Checking state after end of animation duration");
   await selectNodeAndWaitForAnimations(".long", inspector);
   const pixelsData = getDurationAndRate(animationInspector, panel, 5);
   await clickOnCurrentTimeScrubberController(animationInspector,
                                              panel, 1 - pixelsData.rate);
   await clickOnPauseResumeButton(animationInspector, panel);
--- a/devtools/client/inspector/animation/test/browser_animation_logic_avoid-updating-during-hiding.js
+++ b/devtools/client/inspector/animation/test/browser_animation_logic_avoid-updating-during-hiding.js
@@ -32,21 +32,21 @@ add_task(async function() {
   await selectAnimationInspector(inspector);
   await selectNodeAndWaitForAnimations("head", inspector);
   await inspector.toolbox.selectTool("webconsole");
   await selectNode("div", inspector);
   is(animationInspector.state.animations.length, 0,
     "Should not update after selecting another tool");
   await selectAnimationInspector(inspector);
   is(animationInspector.state.animations.length, 1,
-     "Should update after selecting animation inspector");
+    "Should update after selecting animation inspector");
   await assertCurrentTimeUpdated(animationInspector, panel, true);
   await inspector.toolbox.selectTool("webconsole");
   is(animationInspector.state.animations.length, 1,
-     "Should not update after selecting another tool again");
+    "Should not update after selecting another tool again");
   await assertCurrentTimeUpdated(animationInspector, panel, false);
 });
 
 async function assertCurrentTimeUpdated(animationInspector, panel, shouldRunning) {
   let count = 0;
 
   const listener = () => {
     count++;
--- a/devtools/client/inspector/animation/test/browser_animation_logic_mutations.js
+++ b/devtools/client/inspector/animation/test/browser_animation_logic_mutations.js
@@ -5,41 +5,43 @@
 
 // Test for following mutations:
 // * add animation
 // * remove animation
 // * modify animation
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_simple_animation.html");
+  await removeAnimatedElementsExcept(
+    [".compositor-all", ".compositor-notall", ".no-compositor", ".still"]);
   const { animationInspector, inspector, panel } = await openAnimationInspector();
 
   info("Checking the mutation for add an animation");
   const originalAnimationCount = animationInspector.state.animations.length;
   await setClassAttribute(animationInspector, ".still", "ball no-compositor");
   is(animationInspector.state.animations.length, originalAnimationCount + 1,
     "Count of animation should be plus one to original count");
 
   info("Checking added animation existence even the animation name is duplicated");
   is(getAnimationNameCount(panel, "no-compositor"), 2,
-   "Count of animation should be plus one to original count");
+    "Count of animation should be plus one to original count");
 
   info("Checking the mutation for remove an animation");
   await setClassAttribute(animationInspector, ".compositor-notall", "ball still");
   is(animationInspector.state.animations.length, originalAnimationCount,
-   "Count of animation should be same to original count since we remove an animation");
+    "Count of animation should be same to original count since we remove an animation");
 
   info("Checking the mutation for modify an animation");
   await selectNodeAndWaitForAnimations(".compositor-all", inspector);
   await setStyle(animationInspector, ".compositor-all", "animationDuration", "100s");
   await setStyle(animationInspector, ".compositor-all", "animationIterationCount", 1);
   const summaryGraphPathEl = getSummaryGraphPathElement(panel, "compositor-all");
   is(summaryGraphPathEl.viewBox.baseVal.width, 100000,
-    "Width of summary graph path should be 100000 " +
-    "after modifing the duration and iteration count");
+     "Width of summary graph path should be 100000 " +
+     "after modifing the duration and iteration count");
   await setStyle(animationInspector, ".compositor-all", "animationDelay", "100s");
   is(summaryGraphPathEl.viewBox.baseVal.width, 200000,
     "Width of summary graph path should be 200000 after modifing the delay");
   ok(summaryGraphPathEl.parentElement.querySelector(".animation-delay-sign"),
     "Delay sign element shoud exist");
 });
 
 function getAnimationNameCount(panel, animationName) {
--- a/devtools/client/inspector/animation/test/browser_animation_summary-graph_animation-name.js
+++ b/devtools/client/inspector/animation/test/browser_animation_summary-graph_animation-name.js
@@ -2,58 +2,53 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Test for following AnimationName component works.
 // * element existance
 // * name text
 
-const TEST_CASES = [
+const TEST_DATA = [
   {
-    targetClassName: "cssanimation-normal",
+    targetClass: "cssanimation-normal",
     expectedLabel: "cssanimation",
   },
   {
-    targetClassName: "cssanimation-linear",
+    targetClass: "cssanimation-linear",
     expectedLabel: "cssanimation",
   },
   {
-    targetClassName: "delay-positive",
+    targetClass: "delay-positive",
     expectedLabel: "test-delay-animation",
   },
   {
-    targetClassName: "delay-negative",
+    targetClass: "delay-negative",
     expectedLabel: "test-negative-delay-animation",
   },
   {
-    targetClassName: "easing-step",
+    targetClass: "easing-step",
   },
 ];
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_multi_timings.html");
-
+  await removeAnimatedElementsExcept(TEST_DATA.map(t => `.${ t.targetClass }`));
   const { panel } = await openAnimationInspector();
 
-  for (const testCase of TEST_CASES) {
-    const {
-      expectedLabel,
-      targetClassName,
-    } = testCase;
+  for (const { targetClass, expectedLabel } of TEST_DATA) {
+    const animationItemEl =
+      findAnimationItemElementsByTargetSelector(panel, `.${ targetClass }`);
 
-    const animationItemEl =
-      findAnimationItemElementsByTargetClassName(panel, targetClassName);
-
-    info(`Checking animation name element existance for ${ targetClassName }`);
+    info(`Checking animation name element existance for ${ targetClass }`);
     const animationNameEl = animationItemEl.querySelector(".animation-name");
 
     if (expectedLabel) {
       ok(animationNameEl,
-         "The animation name element should be in animation item element");
+        "The animation name element should be in animation item element");
       is(animationNameEl.textContent, expectedLabel,
-         `The animation name should be ${ expectedLabel }`);
+        `The animation name should be ${ expectedLabel }`);
     } else {
       ok(!animationNameEl,
-         "The animation name element should not be in animation item element");
+        "The animation name element should not be in animation item element");
     }
   }
 });
--- a/devtools/client/inspector/animation/test/browser_animation_summary-graph_compositor.js
+++ b/devtools/client/inspector/animation/test/browser_animation_summary-graph_compositor.js
@@ -3,46 +3,47 @@
 
 "use strict";
 
 // Test that when animations displayed in the timeline are running on the
 // compositor, they get a special icon and information in the tooltip.
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_simple_animation.html");
-
+  await removeAnimatedElementsExcept(
+    [".compositor-all", ".compositor-notall", ".no-compositor"]);
   const { inspector, panel } = await openAnimationInspector();
 
   info("Select a test node we know has an animation running on the compositor");
   await selectNodeAndWaitForAnimations(".compositor-all", inspector);
 
   const summaryGraphEl = panel.querySelector(".animation-summary-graph");
   ok(summaryGraphEl.classList.contains("compositor"),
-     "The element has the compositor css class");
+    "The element has the compositor css class");
   ok(hasTooltip(summaryGraphEl,
                 ANIMATION_L10N.getStr("player.allPropertiesOnCompositorTooltip")),
      "The element has the right tooltip content");
 
   info("Select a node we know doesn't have an animation on the compositor");
   await selectNodeAndWaitForAnimations(".no-compositor", inspector);
 
   ok(!summaryGraphEl.classList.contains("compositor"),
-     "The element does not have the compositor css class");
+    "The element does not have the compositor css class");
   ok(!hasTooltip(summaryGraphEl,
                  ANIMATION_L10N.getStr("player.allPropertiesOnCompositorTooltip")),
      "The element does not have oncompositor tooltip content");
   ok(!hasTooltip(summaryGraphEl,
                  ANIMATION_L10N.getStr("player.somePropertiesOnCompositorTooltip")),
      "The element does not have oncompositor tooltip content");
 
   info("Select a node we know has animation on the compositor and not on the compositor");
   await selectNodeAndWaitForAnimations(".compositor-notall", inspector);
 
   ok(summaryGraphEl.classList.contains("compositor"),
-     "The element has the compositor css class");
+    "The element has the compositor css class");
   ok(hasTooltip(summaryGraphEl,
                 ANIMATION_L10N.getStr("player.somePropertiesOnCompositorTooltip")),
      "The element has the right tooltip content");
 });
 
 function hasTooltip(summaryGraphEl, expected) {
   const tooltip = summaryGraphEl.getAttribute("title");
   return tooltip.includes(expected);
--- a/devtools/client/inspector/animation/test/browser_animation_summary-graph_computed-timing-path.js
+++ b/devtools/client/inspector/animation/test/browser_animation_summary-graph_computed-timing-path.js
@@ -5,114 +5,114 @@
 
 // Test for following ComputedTimingPath component works.
 // * element existance
 // * iterations: path, count
 // * delay: path
 // * fill: path
 // * endDelay: path
 
-const TEST_CASES = [
+const TEST_DATA = [
   {
-    targetClassName: "cssanimation-normal",
+    targetClass: "cssanimation-normal",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 250000, y: 40.851 },
         { x: 500000, y: 80.24},
         { x: 750000, y: 96.05 },
         { x: 1000000, y: 100 },
         { x: 1000000, y: 0 },
       ]
     ],
   },
   {
-    targetClassName: "cssanimation-linear",
+    targetClass: "cssanimation-linear",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 250000, y: 25 },
         { x: 500000, y: 50 },
         { x: 750000, y: 75 },
         { x: 1000000, y: 100 },
         { x: 1000000, y: 0 },
       ]
     ],
   },
   {
-    targetClassName: "delay-positive",
+    targetClass: "delay-positive",
     expectedDelayPath: [
       { x: 0, y: 0 },
       { x: 500000, y: 0 },
     ],
     expectedIterationPathList: [
       [
         { x: 500000, y: 0 },
         { x: 750000, y: 25 },
         { x: 1000000, y: 50 },
         { x: 1250000, y: 75 },
         { x: 1500000, y: 100 },
         { x: 1500000, y: 0 },
       ]
     ],
   },
   {
-    targetClassName: "delay-negative",
+    targetClass: "delay-negative",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 0, y: 50 },
         { x: 250000, y: 75 },
         { x: 500000, y: 100 },
         { x: 500000, y: 0 },
       ]
     ],
   },
   {
-    targetClassName: "easing-step",
+    targetClass: "easing-step",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 499999, y: 0 },
         { x: 500000, y: 50 },
         { x: 999999, y: 50 },
         { x: 1000000, y: 0 },
       ]
     ],
   },
   {
-    targetClassName: "enddelay-positive",
+    targetClass: "enddelay-positive",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 250000, y: 25 },
         { x: 500000, y: 50 },
         { x: 750000, y: 75 },
         { x: 1000000, y: 100 },
         { x: 1000000, y: 0 },
       ]
     ],
     expectedEndDelayPath: [
       { x: 1000000, y: 0 },
       { x: 1500000, y: 0 },
     ],
   },
   {
-    targetClassName: "enddelay-negative",
+    targetClass: "enddelay-negative",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 250000, y: 25 },
         { x: 500000, y: 50 },
         { x: 500000, y: 0 },
       ]
     ],
   },
   {
-    targetClassName: "enddelay-with-fill-forwards",
+    targetClass: "enddelay-with-fill-forwards",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 250000, y: 25 },
         { x: 500000, y: 50 },
         { x: 750000, y: 75 },
         { x: 1000000, y: 100 },
         { x: 1000000, y: 0 },
@@ -127,17 +127,17 @@ const TEST_CASES = [
     expectedForwardsPath: [
       { x: 1500000, y: 0 },
       { x: 1500000, y: 100 },
       { x: 2000000, y: 100 },
       { x: 2000000, y: 0 },
     ],
   },
   {
-    targetClassName: "enddelay-with-iterations-infinity",
+    targetClass: "enddelay-with-iterations-infinity",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 250000, y: 25 },
         { x: 500000, y: 50 },
         { x: 750000, y: 75 },
         { x: 1000000, y: 100 },
         { x: 1000000, y: 0 },
@@ -149,17 +149,17 @@ const TEST_CASES = [
         { x: 1750000, y: 75 },
         { x: 2000000, y: 100 },
         { x: 2000000, y: 0 },
       ]
     ],
     isInfinity: true,
   },
   {
-    targetClassName: "direction-alternate-with-iterations-infinity",
+    targetClass: "direction-alternate-with-iterations-infinity",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 250000, y: 25 },
         { x: 500000, y: 50 },
         { x: 750000, y: 75 },
         { x: 1000000, y: 100 },
         { x: 1000000, y: 0 },
@@ -171,17 +171,17 @@ const TEST_CASES = [
         { x: 1500000, y: 50 },
         { x: 1750000, y: 25 },
         { x: 2000000, y: 0 },
       ]
     ],
     isInfinity: true,
   },
   {
-    targetClassName: "direction-alternate-reverse-with-iterations-infinity",
+    targetClass: "direction-alternate-reverse-with-iterations-infinity",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 0, y: 100 },
         { x: 250000, y: 75 },
         { x: 500000, y: 50 },
         { x: 750000, y: 25 },
         { x: 1000000, y: 0 },
@@ -193,17 +193,17 @@ const TEST_CASES = [
         { x: 1750000, y: 75 },
         { x: 2000000, y: 100 },
         { x: 2000000, y: 0 },
       ]
     ],
     isInfinity: true,
   },
   {
-    targetClassName: "direction-reverse-with-iterations-infinity",
+    targetClass: "direction-reverse-with-iterations-infinity",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 0, y: 100 },
         { x: 250000, y: 75 },
         { x: 500000, y: 50 },
         { x: 750000, y: 25 },
         { x: 1000000, y: 0 },
@@ -215,30 +215,30 @@ const TEST_CASES = [
         { x: 1500000, y: 50 },
         { x: 1750000, y: 25 },
         { x: 2000000, y: 0 },
       ]
     ],
     isInfinity: true,
   },
   {
-    targetClassName: "fill-backwards",
+    targetClass: "fill-backwards",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 250000, y: 25 },
         { x: 500000, y: 50 },
         { x: 750000, y: 75 },
         { x: 1000000, y: 100 },
         { x: 1000000, y: 0 },
       ]
     ],
   },
   {
-    targetClassName: "fill-backwards-with-delay-iterationstart",
+    targetClass: "fill-backwards-with-delay-iterationstart",
     expectedDelayPath: [
       { x: 0, y: 0 },
       { x: 0, y: 50 },
       { x: 500000, y: 50 },
       { x: 500000, y: 0 },
     ],
     expectedIterationPathList: [
       [
@@ -251,17 +251,17 @@ const TEST_CASES = [
         { x: 1000000, y: 0 },
         { x: 1250000, y: 25 },
         { x: 1500000, y: 50 },
         { x: 1500000, y: 0 },
       ]
     ],
   },
   {
-    targetClassName: "fill-both",
+    targetClass: "fill-both",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 250000, y: 25 },
         { x: 500000, y: 50 },
         { x: 750000, y: 75 },
         { x: 1000000, y: 100 },
         { x: 1000000, y: 0 },
@@ -270,17 +270,17 @@ const TEST_CASES = [
     expectedForwardsPath: [
       { x: 1000000, y: 0 },
       { x: 1000000, y: 100 },
       { x: 2000000, y: 100 },
       { x: 2000000, y: 0 },
     ],
   },
   {
-    targetClassName: "fill-both-width-delay-iterationstart",
+    targetClass: "fill-both-width-delay-iterationstart",
     expectedDelayPath: [
       { x: 0, y: 0 },
       { x: 0, y: 50 },
       { x: 500000, y: 50 },
       { x: 500000, y: 0 },
     ],
     expectedIterationPathList: [
       [
@@ -297,17 +297,17 @@ const TEST_CASES = [
       ]
     ],
     expectedForwardsPath: [
       { x: 1500000, y: 0 },
       { x: 1500000, y: 50 },
     ],
   },
   {
-    targetClassName: "fill-forwards",
+    targetClass: "fill-forwards",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 250000, y: 25 },
         { x: 500000, y: 50 },
         { x: 750000, y: 75 },
         { x: 1000000, y: 100 },
         { x: 1000000, y: 0 },
@@ -316,148 +316,147 @@ const TEST_CASES = [
     expectedForwardsPath: [
       { x: 1000000, y: 0 },
       { x: 1000000, y: 100 },
       { x: 2000000, y: 100 },
       { x: 2000000, y: 0 },
     ],
   },
   {
-    targetClassName: "iterationstart",
+    targetClass: "iterationstart",
     expectedIterationPathList: [
       [
         { x: 0, y: 50 },
         { x: 250000, y: 75 },
         { x: 500000, y: 100 },
         { x: 500000, y: 0 },
       ],
       [
         { x: 500000, y: 0 },
         { x: 750000, y: 25 },
         { x: 1000000, y: 50 },
         { x: 1000000, y: 0 },
       ]
     ],
   },
   {
-    targetClassName: "no-compositor",
+    targetClass: "no-compositor",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 250000, y: 25 },
         { x: 500000, y: 50 },
         { x: 750000, y: 75 },
         { x: 1000000, y: 100 },
         { x: 1000000, y: 0 },
       ]
     ],
   },
   {
-    targetClassName: "keyframes-easing-step",
+    targetClass: "keyframes-easing-step",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 499999, y: 0 },
         { x: 500000, y: 50 },
         { x: 999999, y: 50 },
         { x: 1000000, y: 0 },
       ]
     ],
   },
   {
-    targetClassName: "narrow-keyframes",
+    targetClass: "narrow-keyframes",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 100000, y: 10 },
         { x: 110000, y: 10 },
         { x: 115000, y: 10 },
         { x: 129999, y: 10 },
         { x: 130000, y: 13 },
         { x: 135000, y: 13.5 },
       ]
     ],
   },
   {
-    targetClassName: "duplicate-offsets",
+    targetClass: "duplicate-offsets",
     expectedIterationPathList: [
       [
         { x: 0, y: 0 },
         { x: 250000, y: 25 },
         { x: 500000, y: 50 },
         { x: 999999, y: 50 },
       ]
     ],
   },
 ];
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_multi_timings.html");
-
   const { panel } = await openAnimationInspector();
 
-  for (const testCase of TEST_CASES) {
+  for (const testData of TEST_DATA) {
     const {
       expectedDelayPath,
       expectedEndDelayPath,
       expectedForwardsPath,
       expectedIterationPathList,
       isInfinity,
-      targetClassName,
-    } = testCase;
+      targetClass,
+    } = testData;
 
     const animationItemEl =
-      findAnimationItemElementsByTargetClassName(panel, targetClassName);
+      findAnimationItemElementsByTargetSelector(panel, `.${ targetClass }`);
 
-    info(`Checking computed timing path existance for ${ targetClassName }`);
+    info(`Checking computed timing path existance for ${ targetClass }`);
     const computedTimingPathEl =
       animationItemEl.querySelector(".animation-computed-timing-path");
     ok(computedTimingPathEl,
        "The computed timing path element should be in each animation item element");
 
-    info(`Checking delay path for ${ targetClassName }`);
+    info(`Checking delay path for ${ targetClass }`);
     const delayPathEl = computedTimingPathEl.querySelector(".animation-delay-path");
 
     if (expectedDelayPath) {
       ok(delayPathEl, "delay path should be existance");
       assertPathSegments(delayPathEl, true, expectedDelayPath);
     } else {
       ok(!delayPathEl, "delay path should not be existance");
     }
 
-    info(`Checking iteration path list for ${ targetClassName }`);
+    info(`Checking iteration path list for ${ targetClass }`);
     const iterationPathEls =
       computedTimingPathEl.querySelectorAll(".animation-iteration-path");
     is(iterationPathEls.length, expectedIterationPathList.length,
        `Number of iteration path should be ${ expectedIterationPathList.length }`);
 
     for (const [j, iterationPathEl] of iterationPathEls.entries()) {
       assertPathSegments(iterationPathEl, true, expectedIterationPathList[j]);
 
-      info(`Checking infinity ${ targetClassName }`);
+      info(`Checking infinity ${ targetClass }`);
       if (isInfinity && j >= 1) {
         ok(iterationPathEl.classList.contains("infinity"),
            "iteration path should have 'infinity' class");
       } else {
         ok(!iterationPathEl.classList.contains("infinity"),
            "iteration path should not have 'infinity' class");
       }
     }
 
-    info(`Checking endDelay path for ${ targetClassName }`);
+    info(`Checking endDelay path for ${ targetClass }`);
     const endDelayPathEl = computedTimingPathEl.querySelector(".animation-enddelay-path");
 
     if (expectedEndDelayPath) {
       ok(endDelayPathEl, "endDelay path should be existance");
       assertPathSegments(endDelayPathEl, true, expectedEndDelayPath);
     } else {
       ok(!endDelayPathEl, "endDelay path should not be existance");
     }
 
-    info(`Checking forwards fill path for ${ targetClassName }`);
+    info(`Checking forwards fill path for ${ targetClass }`);
     const forwardsPathEl =
       computedTimingPathEl.querySelector(".animation-fill-forwards-path");
 
     if (expectedForwardsPath) {
       ok(forwardsPathEl, "forwards path should be existance");
       assertPathSegments(forwardsPathEl, true, expectedForwardsPath);
     } else {
       ok(!forwardsPathEl, "forwards path should not be existance");
--- a/devtools/client/inspector/animation/test/browser_animation_summary-graph_computed-timing-path_different-timescale.js
+++ b/devtools/client/inspector/animation/test/browser_animation_summary-graph_computed-timing-path_different-timescale.js
@@ -2,22 +2,23 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Test the Computed Timing Path component for different time scales.
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_simple_animation.html");
+  await removeAnimatedElementsExcept([".animated", ".end-delay"]);
   const { inspector, panel } = await openAnimationInspector();
 
   info("Checking the path for different time scale");
   await selectNodeAndWaitForAnimations(".animated", inspector);
   const pathStringA = panel.querySelector(".animation-iteration-path").getAttribute("d");
 
   info("Select animation which has different time scale from no-compositor");
-  await selectNodeAndWaitForAnimations("#endDelayed", inspector);
+  await selectNodeAndWaitForAnimations(".end-delay", inspector);
 
   info("Select no-compositor again");
   await selectNodeAndWaitForAnimations(".animated", inspector);
   const pathStringB = panel.querySelector(".animation-iteration-path").getAttribute("d");
   is(pathStringA, pathStringB, "Path string should be same even change the time scale");
 });
--- a/devtools/client/inspector/animation/test/browser_animation_summary-graph_delay-sign.js
+++ b/devtools/client/inspector/animation/test/browser_animation_summary-graph_delay-sign.js
@@ -4,84 +4,79 @@
 "use strict";
 
 // Test for following DelaySign component works.
 // * element existance
 // * left position
 // * width
 // * additinal class
 
-const TEST_CASES = [
+const TEST_DATA = [
   {
-    targetClassName: "delay-positive",
+    targetClass: "delay-positive",
     expectedResult: {
       left: "25%",
       width: "25%",
     },
   },
   {
-    targetClassName: "delay-negative",
+    targetClass: "delay-negative",
     expectedResult: {
       additionalClass: "negative",
       left: "0%",
       width: "25%",
     },
   },
   {
-    targetClassName: "fill-backwards-with-delay-iterationstart",
+    targetClass: "fill-backwards-with-delay-iterationstart",
     expectedResult: {
       additionalClass: "fill",
       left: "25%",
       width: "25%",
     },
   },
   {
-    targetClassName: "fill-both",
+    targetClass: "fill-both",
   },
   {
-    targetClassName: "fill-both-width-delay-iterationstart",
+    targetClass: "fill-both-width-delay-iterationstart",
     expectedResult: {
       additionalClass: "fill",
       left: "25%",
       width: "25%",
     },
   },
   {
-    targetClassName: "keyframes-easing-step",
+    targetClass: "keyframes-easing-step",
   },
 ];
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_multi_timings.html");
-
+  await removeAnimatedElementsExcept(TEST_DATA.map(t => `.${ t.targetClass }`));
   const { panel } = await openAnimationInspector();
 
-  for (const testCase of TEST_CASES) {
-    const {
-      expectedResult,
-      targetClassName,
-    } = testCase;
+  for (const { targetClass, expectedResult } of TEST_DATA) {
+    const animationItemEl =
+      findAnimationItemElementsByTargetSelector(panel, `.${ targetClass }`);
 
-    const animationItemEl =
-      findAnimationItemElementsByTargetClassName(panel, targetClassName);
-
-    info(`Checking delay sign existance for ${ targetClassName }`);
+    info(`Checking delay sign existance for ${ targetClass }`);
     const delaySignEl = animationItemEl.querySelector(".animation-delay-sign");
 
     if (expectedResult) {
       ok(delaySignEl, "The delay sign element should be in animation item element");
 
       is(delaySignEl.style.left, expectedResult.left,
-         `Left position should be ${ expectedResult.left }`);
+        `Left position should be ${ expectedResult.left }`);
       is(delaySignEl.style.width, expectedResult.width,
-         `Width should be ${ expectedResult.width }`);
+        `Width should be ${ expectedResult.width }`);
 
       if (expectedResult.additionalClass) {
         ok(delaySignEl.classList.contains(expectedResult.additionalClass),
-           `delay sign element should have ${ expectedResult.additionalClass } class`);
+          `delay sign element should have ${ expectedResult.additionalClass } class`);
       } else {
         ok(!delaySignEl.classList.contains(expectedResult.additionalClass),
            "delay sign element should not have " +
            `${ expectedResult.additionalClass } class`);
       }
     } else {
       ok(!delaySignEl, "The delay sign element should not be in animation item element");
     }
--- a/devtools/client/inspector/animation/test/browser_animation_summary-graph_effect-timing-path.js
+++ b/devtools/client/inspector/animation/test/browser_animation_summary-graph_effect-timing-path.js
@@ -2,59 +2,54 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Test for following EffectTimingPath component works.
 // * element existance
 // * path
 
-const TEST_CASES = [
+const TEST_DATA = [
   {
-    targetClassName: "cssanimation-linear",
+    targetClass: "cssanimation-linear",
   },
   {
-    targetClassName: "delay-negative",
+    targetClass: "delay-negative",
   },
   {
-    targetClassName: "easing-step",
+    targetClass: "easing-step",
     expectedPath: [
       { x: 0, y: 0 },
       { x: 499999, y: 0 },
       { x: 500000, y: 50 },
       { x: 999999, y: 50 },
       { x: 1000000, y: 0 },
     ],
   },
   {
-    targetClassName: "keyframes-easing-step",
+    targetClass: "keyframes-easing-step",
   },
 ];
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_multi_timings.html");
-
+  await removeAnimatedElementsExcept(TEST_DATA.map(t => `.${ t.targetClass }`));
   const { panel } = await openAnimationInspector();
 
-  for (const testCase of TEST_CASES) {
-    const {
-      expectedPath,
-      targetClassName,
-    } = testCase;
+  for (const { targetClass, expectedPath } of TEST_DATA) {
+    const animationItemEl =
+      findAnimationItemElementsByTargetSelector(panel, `.${ targetClass }`);
 
-    const animationItemEl =
-      findAnimationItemElementsByTargetClassName(panel, targetClassName);
-
-    info(`Checking effect timing path existance for ${ targetClassName }`);
+    info(`Checking effect timing path existance for ${ targetClass }`);
     const effectTimingPathEl =
       animationItemEl.querySelector(".animation-effect-timing-path");
 
     if (expectedPath) {
       ok(effectTimingPathEl,
-         "The effect timing path element should be in animation item element");
+        "The effect timing path element should be in animation item element");
       const pathEl = effectTimingPathEl.querySelector(".animation-iteration-path");
       assertPathSegments(pathEl, false, expectedPath);
     } else {
       ok(!effectTimingPathEl,
-         "The effect timing path element should not be in animation item element");
+        "The effect timing path element should not be in animation item element");
     }
   }
 });
--- a/devtools/client/inspector/animation/test/browser_animation_summary-graph_end-delay-sign.js
+++ b/devtools/client/inspector/animation/test/browser_animation_summary-graph_end-delay-sign.js
@@ -4,79 +4,74 @@
 "use strict";
 
 // Test for following EndDelaySign component works.
 // * element existance
 // * left position
 // * width
 // * additinal class
 
-const TEST_CASES = [
+const TEST_DATA = [
   {
-    targetClassName: "enddelay-positive",
+    targetClass: "enddelay-positive",
     expectedResult: {
       left: "75%",
       width: "25%",
     },
   },
   {
-    targetClassName: "enddelay-negative",
+    targetClass: "enddelay-negative",
     expectedResult: {
       additionalClass: "negative",
       left: "50%",
       width: "25%",
     },
   },
   {
-    targetClassName: "enddelay-with-fill-forwards",
+    targetClass: "enddelay-with-fill-forwards",
     expectedResult: {
       additionalClass: "fill",
       left: "75%",
       width: "25%",
     },
   },
   {
-    targetClassName: "enddelay-with-iterations-infinity",
+    targetClass: "enddelay-with-iterations-infinity",
   },
   {
-    targetClassName: "keyframes-easing-step",
+    targetClass: "delay-negative",
   },
 ];
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_multi_timings.html");
-
+  await removeAnimatedElementsExcept(TEST_DATA.map(t => `.${ t.targetClass }`));
   const { panel } = await openAnimationInspector();
 
-  for (const testCase of TEST_CASES) {
-    const {
-      expectedResult,
-      targetClassName,
-    } = testCase;
+  for (const { targetClass, expectedResult } of TEST_DATA) {
+    const animationItemEl =
+      findAnimationItemElementsByTargetSelector(panel, `.${ targetClass }`);
 
-    const animationItemEl =
-      findAnimationItemElementsByTargetClassName(panel, targetClassName);
-
-    info(`Checking endDelay sign existance for ${ targetClassName }`);
+    info(`Checking endDelay sign existance for ${ targetClass }`);
     const endDelaySignEl = animationItemEl.querySelector(".animation-end-delay-sign");
 
     if (expectedResult) {
       ok(endDelaySignEl, "The endDelay sign element should be in animation item element");
 
       is(endDelaySignEl.style.left, expectedResult.left,
-         `Left position should be ${ expectedResult.left }`);
+        `Left position should be ${ expectedResult.left }`);
       is(endDelaySignEl.style.width, expectedResult.width,
-         `Width should be ${ expectedResult.width }`);
+        `Width should be ${ expectedResult.width }`);
 
       if (expectedResult.additionalClass) {
         ok(endDelaySignEl.classList.contains(expectedResult.additionalClass),
-           `endDelay sign element should have ${ expectedResult.additionalClass } class`);
+          `endDelay sign element should have ${ expectedResult.additionalClass } class`);
       } else {
         ok(!endDelaySignEl.classList.contains(expectedResult.additionalClass),
            "endDelay sign element should not have " +
            `${ expectedResult.additionalClass } class`);
       }
     } else {
       ok(!endDelaySignEl,
-         "The endDelay sign element should not be in animation item element");
+        "The endDelay sign element should not be in animation item element");
     }
   }
 });
--- a/devtools/client/inspector/animation/test/browser_animation_summary-graph_negative-delay-path.js
+++ b/devtools/client/inspector/animation/test/browser_animation_summary-graph_negative-delay-path.js
@@ -2,52 +2,47 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Test for following NegativeDelayPath component works.
 // * element existance
 // * path
 
-const TEST_CASES = [
+const TEST_DATA = [
   {
-    targetClassName: "delay-positive",
+    targetClass: "delay-positive",
   },
   {
-    targetClassName: "delay-negative",
+    targetClass: "delay-negative",
     expectedPath: [
       { x: -500000, y: 0 },
       { x: -250000, y: 25 },
       { x: 0, y: 50 },
       { x: 0, y: 0 },
     ],
   },
 ];
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_multi_timings.html");
-
+  await removeAnimatedElementsExcept(TEST_DATA.map(t => `.${ t.targetClass }`));
   const { panel } = await openAnimationInspector();
 
-  for (const testCase of TEST_CASES) {
-    const {
-      expectedPath,
-      targetClassName,
-    } = testCase;
+  for (const { targetClass, expectedPath } of TEST_DATA) {
+    const animationItemEl =
+      findAnimationItemElementsByTargetSelector(panel, `.${ targetClass }`);
 
-    const animationItemEl =
-      findAnimationItemElementsByTargetClassName(panel, targetClassName);
-
-    info(`Checking negative delay path existence for ${ targetClassName }`);
+    info(`Checking negative delay path existence for ${ targetClass }`);
     const negativeDelayPathEl =
       animationItemEl.querySelector(".animation-negative-delay-path");
 
     if (expectedPath) {
       ok(negativeDelayPathEl,
-         "The negative delay path element should be in animation item element");
+        "The negative delay path element should be in animation item element");
       const pathEl = negativeDelayPathEl.querySelector("path");
       assertPathSegments(pathEl, true, expectedPath);
     } else {
       ok(!negativeDelayPathEl,
-         "The negative delay path element should not be in animation item element");
+        "The negative delay path element should not be in animation item element");
     }
   }
 });
--- a/devtools/client/inspector/animation/test/browser_animation_summary-graph_negative-end-delay-path.js
+++ b/devtools/client/inspector/animation/test/browser_animation_summary-graph_negative-end-delay-path.js
@@ -2,53 +2,48 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Test for following NegativeEndDelayPath component works.
 // * element existance
 // * path
 
-const TEST_CASES = [
+const TEST_DATA = [
   {
-    targetClassName: "enddelay-positive",
+    targetClass: "enddelay-positive",
   },
   {
-    targetClassName: "enddelay-negative",
+    targetClass: "enddelay-negative",
     expectedPath: [
       { x: 500000, y: 0 },
       { x: 500000, y: 50 },
       { x: 750000, y: 75 },
       { x: 1000000, y: 100 },
       { x: 1000000, y: 0 },
     ],
   },
 ];
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_multi_timings.html");
-
+  await removeAnimatedElementsExcept(TEST_DATA.map(t => `.${ t.targetClass }`));
   const { panel } = await openAnimationInspector();
 
-  for (const testCase of TEST_CASES) {
-    const {
-      expectedPath,
-      targetClassName,
-    } = testCase;
+  for (const { targetClass, expectedPath } of TEST_DATA) {
+    const animationItemEl =
+      findAnimationItemElementsByTargetSelector(panel, `.${ targetClass }`);
 
-    const animationItemEl =
-      findAnimationItemElementsByTargetClassName(panel, targetClassName);
-
-    info(`Checking negative endDelay path existance for ${ targetClassName }`);
+    info(`Checking negative endDelay path existance for ${ targetClass }`);
     const negativeEndDelayPathEl =
       animationItemEl.querySelector(".animation-negative-end-delay-path");
 
     if (expectedPath) {
       ok(negativeEndDelayPathEl,
-         "The negative endDelay path element should be in animation item element");
+        "The negative endDelay path element should be in animation item element");
       const pathEl = negativeEndDelayPathEl.querySelector("path");
       assertPathSegments(pathEl, true, expectedPath);
     } else {
       ok(!negativeEndDelayPathEl,
-         "The negative endDelay path element should not be in animation item element");
+        "The negative endDelay path element should not be in animation item element");
     }
   }
 });
--- a/devtools/client/inspector/animation/test/browser_animation_summary-graph_tooltip.js
+++ b/devtools/client/inspector/animation/test/browser_animation_summary-graph_tooltip.js
@@ -1,202 +1,197 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 // Test for existance and content of tooltip on summary graph element.
 
-const TEST_CASES = [
+const TEST_DATA = [
   {
-    targetClassName: "cssanimation-normal",
+    targetClass: "cssanimation-normal",
     expectedResult: {
       nameAndType: "cssanimation - CSS Animation",
       duration: "1,000s",
     },
   },
   {
-    targetClassName: "cssanimation-linear",
+    targetClass: "cssanimation-linear",
     expectedResult: {
       nameAndType: "cssanimation - CSS Animation",
       duration: "1,000s",
       animationTimingFunction: "linear",
     },
   },
   {
-    targetClassName: "delay-positive",
+    targetClass: "delay-positive",
     expectedResult: {
       nameAndType: "test-delay-animation - Script Animation",
       delay: "500s",
       duration: "1,000s",
     },
   },
   {
-    targetClassName: "delay-negative",
+    targetClass: "delay-negative",
     expectedResult: {
       nameAndType: "test-negative-delay-animation - Script Animation",
       delay: "-500s",
       duration: "1,000s",
     },
   },
   {
-    targetClassName: "easing-step",
+    targetClass: "easing-step",
     expectedResult: {
       nameAndType: "Script Animation",
       duration: "1,000s",
       easing: "steps(2)",
     },
   },
   {
-    targetClassName: "enddelay-positive",
+    targetClass: "enddelay-positive",
     expectedResult: {
       nameAndType: "Script Animation",
       duration: "1,000s",
       endDelay: "500s",
     },
   },
   {
-    targetClassName: "enddelay-negative",
+    targetClass: "enddelay-negative",
     expectedResult: {
       nameAndType: "Script Animation",
       duration: "1,000s",
       endDelay: "-500s",
     },
   },
   {
-    targetClassName: "enddelay-with-fill-forwards",
+    targetClass: "enddelay-with-fill-forwards",
     expectedResult: {
       nameAndType: "Script Animation",
       duration: "1,000s",
       endDelay: "500s",
       fill: "forwards",
     },
   },
   {
-    targetClassName: "enddelay-with-iterations-infinity",
+    targetClass: "enddelay-with-iterations-infinity",
     expectedResult: {
       nameAndType: "Script Animation",
       duration: "1,000s",
       endDelay: "500s",
       iterations: "\u221E",
     },
   },
   {
-    targetClassName: "direction-alternate-with-iterations-infinity",
+    targetClass: "direction-alternate-with-iterations-infinity",
     expectedResult: {
       nameAndType: "Script Animation",
       duration: "1,000s",
       direction: "alternate",
       iterations: "\u221E",
     },
   },
   {
-    targetClassName: "direction-alternate-reverse-with-iterations-infinity",
+    targetClass: "direction-alternate-reverse-with-iterations-infinity",
     expectedResult: {
       nameAndType: "Script Animation",
       duration: "1,000s",
       direction: "alternate-reverse",
       iterations: "\u221E",
     },
   },
   {
-    targetClassName: "direction-reverse-with-iterations-infinity",
+    targetClass: "direction-reverse-with-iterations-infinity",
     expectedResult: {
       nameAndType: "Script Animation",
       duration: "1,000s",
       direction: "reverse",
       iterations: "\u221E",
     },
   },
   {
-    targetClassName: "fill-backwards",
+    targetClass: "fill-backwards",
     expectedResult: {
       nameAndType: "Script Animation",
       duration: "1,000s",
       fill: "backwards",
     },
   },
   {
-    targetClassName: "fill-backwards-with-delay-iterationstart",
+    targetClass: "fill-backwards-with-delay-iterationstart",
     expectedResult: {
       nameAndType: "Script Animation",
       delay: "500s",
       duration: "1,000s",
       fill: "backwards",
       iterationStart: "0.5",
     },
   },
   {
-    targetClassName: "fill-both",
+    targetClass: "fill-both",
     expectedResult: {
       nameAndType: "Script Animation",
       duration: "1,000s",
       fill: "both",
     },
   },
   {
-    targetClassName: "fill-both-width-delay-iterationstart",
+    targetClass: "fill-both-width-delay-iterationstart",
     expectedResult: {
       nameAndType: "Script Animation",
       delay: "500s",
       duration: "1,000s",
       fill: "both",
       iterationStart: "0.5",
     },
   },
   {
-    targetClassName: "fill-forwards",
+    targetClass: "fill-forwards",
     expectedResult: {
       nameAndType: "Script Animation",
       duration: "1,000s",
       fill: "forwards",
     },
   },
   {
-    targetClassName: "iterationstart",
+    targetClass: "iterationstart",
     expectedResult: {
       nameAndType: "Script Animation",
       duration: "1,000s",
       iterationStart: "0.5",
     },
   },
   {
-    targetClassName: "no-compositor",
+    targetClass: "no-compositor",
     expectedResult: {
       nameAndType: "Script Animation",
       duration: "1,000s",
     },
   },
   {
-    targetClassName: "keyframes-easing-step",
+    targetClass: "keyframes-easing-step",
     expectedResult: {
       nameAndType: "Script Animation",
       duration: "1,000s",
     },
   },
 ];
 
 add_task(async function() {
   await addTab(URL_ROOT + "doc_multi_timings.html");
-
+  await removeAnimatedElementsExcept(TEST_DATA.map(t => `.${ t.targetClass }`));
   const { panel } = await openAnimationInspector();
 
-  for (const testCase of TEST_CASES) {
-    const {
-      expectedResult,
-      targetClassName,
-    } = testCase;
-
+  for (const { targetClass, expectedResult } of TEST_DATA) {
     const animationItemEl =
-      findAnimationItemElementsByTargetClassName(panel, targetClassName);
+      findAnimationItemElementsByTargetSelector(panel, `.${ targetClass }`);
     const summaryGraphEl = animationItemEl.querySelector(".animation-summary-graph");
 
-    info(`Checking tooltip for ${ targetClassName }`);
+    info(`Checking tooltip for ${ targetClass }`);
     ok(summaryGraphEl.hasAttribute("title"),
-       "Summary graph should have 'title' attribute");
+      "Summary graph should have 'title' attribute");
 
     const tooltip = summaryGraphEl.getAttribute("title");
     const {
       animationTimingFunction,
       delay,
       easing,
       endDelay,
       direction,
@@ -209,17 +204,17 @@ add_task(async function() {
 
     ok(tooltip.startsWith(nameAndType), "Tooltip should start with name and type");
 
     if (animationTimingFunction) {
       const expected = `Animation timing function: ${ animationTimingFunction }`;
       ok(tooltip.includes(expected), `Tooltip should include '${ expected }'`);
     } else {
       ok(!tooltip.includes("Animation timing function:"),
-         "Tooltip should not include animation timing function");
+        "Tooltip should not include animation timing function");
     }
 
     if (delay) {
       const expected = `Delay: ${ delay }`;
       ok(tooltip.includes(expected), `Tooltip should include '${ expected }'`);
     } else {
       ok(!tooltip.includes("Delay:"), "Tooltip should not include delay");
     }
@@ -266,12 +261,12 @@ add_task(async function() {
       ok(!tooltip.includes("Repeats:"), "Tooltip should not include iterations");
     }
 
     if (iterationStart) {
       const expected = `Iteration start: ${ iterationStart }`;
       ok(tooltip.includes(expected), `Tooltip should include '${ expected }'`);
     } else {
       ok(!tooltip.includes("Iteration start:"),
-         "Tooltip should not include iterationStart");
+        "Tooltip should not include iterationStart");
     }
   }
 });
new file mode 100644
--- /dev/null
+++ b/devtools/client/inspector/animation/test/doc_frame_script.js
@@ -0,0 +1,29 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+/* globals addMessageListener, sendAsyncMessage */
+
+"use strict";
+
+// A helper frame-script for animation inspector.
+
+addMessageListener("Test:RemoveAnimatedElementsExcept", function(msg) {
+  const { selectors } = msg.data;
+
+  for (const animation of content.document.getAnimations()) {
+    if (isRemovableElement(animation, selectors)) {
+      animation.effect.target.remove();
+    }
+  }
+
+  sendAsyncMessage("Test:RemoveAnimatedElementsExcept");
+});
+
+function isRemovableElement(animation, selectors) {
+  for (const selector of selectors) {
+    if (animation.effect.target.matches(selector)) {
+      return false;
+    }
+  }
+
+  return true;
+}
--- a/devtools/client/inspector/animation/test/doc_multi_easings.html
+++ b/devtools/client/inspector/animation/test/doc_multi_easings.html
@@ -10,17 +10,17 @@
     </style>
   </head>
   <body>
     <script>
     "use strict";
 
     function createAnimation(name, keyframes, effectEasing) {
       const div = document.createElement("div");
-      div.id = name;
+      div.classList.add(name);
       document.body.appendChild(div);
 
       const effect = {
         duration: 100000,
         fill: "forwards"
       };
 
       if (effectEasing) {
--- a/devtools/client/inspector/animation/test/doc_multi_keyframes.html
+++ b/devtools/client/inspector/animation/test/doc_multi_keyframes.html
@@ -10,17 +10,17 @@
     </style>
   </head>
   <body>
     <script>
     "use strict";
 
     function createAnimation(name, keyframes, effectEasing) {
       const div = document.createElement("div");
-      div.id = name;
+      div.classList.add(name);
       document.body.appendChild(div);
 
       const effect = {
         duration: 100000,
         fill: "forwards"
       };
 
       if (effectEasing) {
--- a/devtools/client/inspector/animation/test/doc_simple_animation.html
+++ b/devtools/client/inspector/animation/test/doc_simple_animation.html
@@ -149,26 +149,26 @@
   <div class="ball animated"></div>
   <div class="ball multi"></div>
   <div class="ball delayed"></div>
   <div class="ball multi-finite"></div>
   <div class="ball short"></div>
   <div class="ball long"></div>
   <div class="ball negative-delay"></div>
   <div class="ball no-compositor"></div>
-  <div class="ball" id="endDelayed"></div>
+  <div class="ball end-delay"></div>
   <div class="ball compositor-all"></div>
   <div class="ball compositor-notall"></div>
   <div class="ball longhand"></div>
   <script>
     /* globals KeyframeEffect, Animation */
     "use strict";
 
-    var el = document.getElementById("endDelayed");
-    let effect = new KeyframeEffect(el, [
+    const el = document.querySelector(".end-delay");
+    const effect = new KeyframeEffect(el, [
       { opacity: 0, offset: 0 },
       { opacity: 1, offset: 1 }
     ], { duration: 1000000, endDelay: 500000, fill: "none" });
-    let animation = new Animation(effect, document.timeline);
+    const animation = new Animation(effect, document.timeline);
     animation.play();
   </script>
 </body>
 </html>
--- a/devtools/client/inspector/animation/test/head.js
+++ b/devtools/client/inspector/animation/test/head.js
@@ -80,35 +80,55 @@ addTab = async function(url) {
   const browser = tab.linkedBrowser;
   info("Loading the helper frame script " + FRAME_SCRIPT_URL);
   browser.messageManager.loadFrameScript(FRAME_SCRIPT_URL, false);
   loadFrameScriptUtils(browser);
   return tab;
 };
 
 /**
+ * Remove animated elements from document except given selectors.
+ *
+ * @param {Array} selectors
+ * @return {Promise}
+ */
+const removeAnimatedElementsExcept = async function(selectors) {
+  return executeInContent("Test:RemoveAnimatedElementsExcept", { selectors });
+};
+
+/**
  * Click on an animation in the timeline to select it.
  *
  * @param {AnimationInspector} animationInspector.
  * @param {AnimationsPanel} panel
  *        The panel instance.
  * @param {Number} index
  *        The index of the animation to click on.
  */
 const clickOnAnimation = async function(animationInspector, panel, index) {
   info("Click on animation " + index + " in the timeline");
   const summaryGraphEl = panel.querySelectorAll(".animation-summary-graph")[index];
-  // Scroll to show the timeBlock since the element may be out of displayed area.
-  summaryGraphEl.scrollIntoView(false);
-  const bounds = summaryGraphEl.getBoundingClientRect();
-  const x = bounds.width / 2;
-  const y = bounds.height / 2;
-  EventUtils.synthesizeMouse(summaryGraphEl, x, y, {}, summaryGraphEl.ownerGlobal);
+  await clickOnSummaryGraph(animationInspector, panel, summaryGraphEl);
+};
 
-  await waitForAnimationDetail(animationInspector);
+/**
+ * Click on an animation by given selector of node which is target element of animation.
+ *
+ * @param {AnimationInspector} animationInspector.
+ * @param {AnimationsPanel} panel
+ *        The panel instance.
+ * @param {String} selector
+ *        Selector of node which is target element of animation.
+ */
+const clickOnAnimationByTargetSelector = async function(animationInspector,
+                                                        panel, selector) {
+  info(`Click on animation whose selector of target element is '${ selector }'`);
+  const animationItemEl = findAnimationItemElementsByTargetSelector(panel, selector);
+  const summaryGraphEl = animationItemEl.querySelector(".animation-summary-graph");
+  await clickOnSummaryGraph(animationInspector, panel, summaryGraphEl);
 };
 
 /**
  * Click on close button for animation detail pane.
  *
  * @param {AnimationsPanel} panel
  *        The panel instance.
  */
@@ -198,16 +218,35 @@ const clickOnPlaybackRateSelector = asyn
 
   const win = selectEl.ownerGlobal;
   EventUtils.synthesizeMouseAtCenter(selectEl, { type: "mousedown" }, win);
   EventUtils.synthesizeMouseAtCenter(optionEl, { type: "mouseup" }, win);
   await waitForSummaryAndDetail(animationInspector);
 };
 
 /**
+ * Click on given summary graph element.
+ *
+ * @param {AnimationInspector} animationInspector
+ * @param {AnimationsPanel} panel
+ * @param {Element} summaryGraphEl
+ */
+const clickOnSummaryGraph = async function(animationInspector, panel, summaryGraphEl) {
+  // Disable pointer-events of the scrubber in order to avoid to click accidently.
+  const scrubberEl = panel.querySelector(".current-time-scrubber");
+  scrubberEl.style.pointerEvents = "none";
+  // Scroll to show the timeBlock since the element may be out of displayed area.
+  summaryGraphEl.scrollIntoView(false);
+  EventUtils.synthesizeMouseAtCenter(summaryGraphEl, {}, summaryGraphEl.ownerGlobal);
+  await waitForAnimationDetail(animationInspector);
+  // Restore the scrubber style.
+  scrubberEl.style.pointerEvents = "unset";
+};
+
+/**
  * Drag on the scrubber to update the animation current time.
  *
  * @param {AnimationsPanel} panel
  * @param {Number} mouseDownPosition
  *        rate on scrubber controller pane.
  *        This method calculates
  *        `mouseDownPosition * offsetWidth + offsetLeft of scrubber controller pane`
  *        as the clientX of MouseEvent.
@@ -585,32 +624,31 @@ function isPassingThrough(pathSegList, x
       return true;
     }
     previousPathSeg = pathSeg;
   }
   return false;
 }
 
 /**
- * Return animation item element by target node class.
- * This function compares betweem animation-target textContent and given className.
- * Also, this function premises one class name.
+ * Return animation item element by target node selector.
+ * This function compares betweem animation-target textContent and given selector.
+ * Then returns matched first item.
  *
  * @param {Element} panel - root element of animation inspector.
- * @param {String} targetClassName - class name of tested element.
+ * @param {String} selector - selector of tested element.
  * @return {Element} animation item element.
  */
-function findAnimationItemElementsByTargetClassName(panel, targetClassName) {
-  const animationTargetEls = panel.querySelectorAll(".animation-target");
+function findAnimationItemElementsByTargetSelector(panel, selector) {
+  const attrNameEls = panel.querySelectorAll(".animation-target .attrName");
+  const regexp = new RegExp(`\\${ selector }(\\.|$)`, "gi");
 
-  for (const animationTargetEl of animationTargetEls) {
-    const className = animationTargetEl.textContent.split(".")[1];
-
-    if (className === targetClassName) {
-      return animationTargetEl.closest(".animation-item");
+  for (const attrNameEl of attrNameEls) {
+    if (regexp.exec(attrNameEl.textContent)) {
+      return attrNameEl.closest(".animation-item");
     }
   }
 
   return null;
 }
 
 /**
  * Find the <stop> element which has the given offset in the given linearGradientEl.
--- a/devtools/client/inspector/rules/rules.js
+++ b/devtools/client/inspector/rules/rules.js
@@ -1745,16 +1745,17 @@ function RuleViewTool(inspector, window)
   this.document = window.document;
 
   this.view = new CssRuleView(this.inspector, this.document);
 
   this.clearUserProperties = this.clearUserProperties.bind(this);
   this.refresh = this.refresh.bind(this);
   this.onDetachedFront = this.onDetachedFront.bind(this);
   this.onPanelSelected = this.onPanelSelected.bind(this);
+  this.onDetachedFront = this.onDetachedFront.bind(this);
   this.onSelected = this.onSelected.bind(this);
   this.onViewRefreshed = this.onViewRefreshed.bind(this);
 
   this.view.on("ruleview-refreshed", this.onViewRefreshed);
   this.inspector.selection.on("detached-front", this.onDetachedFront);
   this.inspector.selection.on("new-node-front", this.onSelected);
   this.inspector.selection.on("pseudoclass", this.refresh);
   this.inspector.target.on("navigate", this.clearUserProperties);
--- a/devtools/client/netmonitor/src/utils/firefox/open-request-in-tab.js
+++ b/devtools/client/netmonitor/src/utils/firefox/open-request-in-tab.js
@@ -7,30 +7,30 @@
 
 let { Cc, Ci } = require("chrome");
 const Services = require("Services");
 const { gDevTools } = require("devtools/client/framework/devtools");
 
 /**
  * Opens given request in a new tab.
  */
-function openRequestInTab(request) {
+function openRequestInTab(url, requestPostData) {
   let win = Services.wm.getMostRecentWindow(gDevTools.chromeWindowType);
-  let rawData = request.requestPostData ? request.requestPostData.postData : null;
+  let rawData = requestPostData ? requestPostData.postData : null;
   let postData;
 
   if (rawData && rawData.text) {
     let stringStream = getInputStreamFromString(rawData.text);
     postData = Cc["@mozilla.org/network/mime-input-stream;1"]
       .createInstance(Ci.nsIMIMEInputStream);
     postData.addHeader("Content-Type", "application/x-www-form-urlencoded");
     postData.setData(stringStream);
   }
 
-  win.gBrowser.selectedTab = win.gBrowser.addTab(request.url, null, null, postData);
+  win.gBrowser.selectedTab = win.gBrowser.addTab(url, null, null, postData);
 }
 
 function getInputStreamFromString(data) {
   let stringStream = Cc["@mozilla.org/io/string-input-stream;1"]
     .createInstance(Ci.nsIStringInputStream);
   stringStream.data = data;
   return stringStream;
 }
--- a/devtools/client/netmonitor/src/utils/open-request-in-tab.js
+++ b/devtools/client/netmonitor/src/utils/open-request-in-tab.js
@@ -5,36 +5,33 @@
 "use strict";
 
 const Services = require("Services");
 const { gDevTools } = require("devtools/client/framework/devtools");
 
 /**
  * Opens given request in a new tab.
  */
-function openRequestInTab(request) {
+function openRequestInTab(url, requestPostData) {
   let win = Services.wm.getMostRecentWindow(gDevTools.chromeWindowType);
-  if (request.method.toLowerCase() !== "get") {
-    win.openUILinkIn(this.selectedRequest.url, "tab", {
-      relatedToCurrent: true
-    });
+  if (!requestPostData) {
+    win.openUILinkIn(url, "tab", {relatedToCurrent: true});
   } else {
-    openRequestInTabHelper({
-      url: request.url,
-      method: request.method,
-      data: request.requestPostData ? request.requestPostData.postData : null,
+    openPostRequestInTabHelper({
+      url,
+      data: requestPostData.postData
     });
   }
 }
 
-function openRequestInTabHelper({url, method, data}) {
+function openPostRequestInTabHelper({url, data}) {
   let form = document.createElement("form");
   form.target = "_blank";
   form.action = url;
-  form.method = method;
+  form.method = "post";
 
   if (data) {
     for (let key in data) {
       let input = document.createElement("input");
       input.name = key;
       input.value = data[key];
       form.appendChild(input);
     }
--- a/devtools/client/netmonitor/src/widgets/RequestListContextMenu.js
+++ b/devtools/client/netmonitor/src/widgets/RequestListContextMenu.js
@@ -189,17 +189,17 @@ class RequestListContextMenu {
       visible: copySubmenu.slice(15, 16).some((subMenu) => subMenu.visible),
     });
 
     menu.push({
       id: "request-list-context-newtab",
       label: L10N.getStr("netmonitor.context.newTab"),
       accesskey: L10N.getStr("netmonitor.context.newTab.accesskey"),
       visible: !!selectedRequest,
-      click: () => this.openRequestInTab(selectedRequest),
+      click: () => this.openRequestInTab(id, url, requestPostData),
     });
 
     menu.push({
       id: "request-list-context-open-in-debugger",
       label: L10N.getStr("netmonitor.context.openInDebugger"),
       accesskey: L10N.getStr("netmonitor.context.openInDebugger.accesskey"),
       visible: !!(selectedRequest && mimeType && mimeType.includes("javascript")),
       click: () => this.openInDebugger(url),
@@ -224,18 +224,20 @@ class RequestListContextMenu {
     });
 
     showMenu(event, menu);
   }
 
   /**
    * Opens selected item in a new tab.
    */
-  openRequestInTab(selectedRequest) {
-    openRequestInTab(selectedRequest);
+  async openRequestInTab(id, url, requestPostData) {
+    requestPostData = requestPostData ||
+      await this.props.connector.requestData(id, "requestPostData");
+    openRequestInTab(url, requestPostData);
   }
 
   /**
    * Opens selected item in the debugger
    */
   openInDebugger(url) {
     let toolbox = gDevTools.getToolbox(this.props.connector.getTabTarget());
     toolbox.viewSourceInDebugger(url, 0);
--- a/devtools/client/netmonitor/test/browser.ini
+++ b/devtools/client/netmonitor/test/browser.ini
@@ -35,21 +35,23 @@ support-files =
   html_single-get-page.html
   html_send-beacon.html
   html_sorting-test-page.html
   html_statistics-test-page.html
   html_status-codes-test-page.html
   html_api-calls-test-page.html
   html_copy-as-curl.html
   html_curl-utils.html
+  html_open-request-in-tab.html
   sjs_content-type-test-server.sjs
   sjs_cors-test-server.sjs
   sjs_https-redirect-test-server.sjs
   sjs_hsts-test-server.sjs
   sjs_json-test-server.sjs
+  sjs_method-test-server.sjs
   sjs_simple-test-server.sjs
   sjs_simple-unsorted-cookies-test-server.sjs
   sjs_sorting-test-server.sjs
   sjs_status-codes-test-server.sjs
   sjs_truncate-test-server.sjs
   test-image.png
   service-workers/status-codes.html
   service-workers/status-codes-service-worker.js
--- a/devtools/client/netmonitor/test/browser_net_open_request_in_tab.js
+++ b/devtools/client/netmonitor/test/browser_net_open_request_in_tab.js
@@ -3,38 +3,74 @@
 
 "use strict";
 
 /**
  * Tests if Open in new tab works.
  */
 
 add_task(async function() {
-  let { tab, monitor } = await initNetMonitor(CUSTOM_GET_URL);
+  let { tab, monitor } = await initNetMonitor(OPEN_REQUEST_IN_TAB_URL);
   info("Starting test...");
 
   let { document, store, windowRequire } = monitor.panelWin;
   let contextMenuDoc = monitor.panelWin.parent.document;
   let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
+  let newTab;
 
   store.dispatch(Actions.batchEnable(false));
 
-  // Execute requests.
-  await performRequests(monitor, tab, 1);
+  // Post data may be fetched by the Header panel,
+  // so set the Timings panel as the new default.
+  store.getState().ui.detailsPanelSelectedTab = "timings";
+
+  // Open GET request in new tab
+  await performRequest("GET");
 
-  wait = waitForDOM(contextMenuDoc, "#request-list-context-newtab");
-  EventUtils.sendMouseEvent({ type: "mousedown" },
-    document.querySelectorAll(".request-list-item")[0]);
-  EventUtils.sendMouseEvent({ type: "contextmenu" },
-    document.querySelectorAll(".request-list-item")[0]);
-  await wait;
+  newTab = await openLastRequestInTab();
+  await checkTabResponse(newTab, "GET");
 
-  let onTabOpen = once(gBrowser.tabContainer, "TabOpen", false);
-  monitor.panelWin.parent.document
-    .querySelector("#request-list-context-newtab").click();
-  await onTabOpen;
-
-  ok(true, "A new tab has been opened");
+  // Open POST request in new tab
+  await performRequest("POST");
+  newTab = await openLastRequestInTab();
+  await checkTabResponse(newTab, "POST");
 
   await teardown(monitor);
 
   gBrowser.removeCurrentTab();
+
+  async function openLastRequestInTab() {
+    let wait = waitForDOM(contextMenuDoc, "#request-list-context-newtab");
+    let requestItems = document.querySelectorAll(".request-list-item");
+    let lastRequest = requestItems[requestItems.length - 1];
+    EventUtils.sendMouseEvent({ type: "mousedown" }, lastRequest);
+    EventUtils.sendMouseEvent({ type: "contextmenu" }, lastRequest);
+    await wait;
+
+    let onTabOpen = once(gBrowser.tabContainer, "TabOpen", false);
+    monitor.panelWin.parent.document
+      .querySelector("#request-list-context-newtab").click();
+    await onTabOpen;
+    ok(true, "A new tab has been opened");
+
+    let awaitedTab = gBrowser.selectedTab;
+    await BrowserTestUtils.browserLoaded(awaitedTab.linkedBrowser);
+    info("The tab load completed");
+
+    return awaitedTab;
+  }
+
+  async function performRequest(method) {
+    let wait = waitForNetworkEvents(monitor, 1);
+    await ContentTask.spawn(tab.linkedBrowser, method, async function(meth) {
+      content.wrappedJSObject.performRequest(meth);
+    });
+    await wait;
+  }
+
+  async function checkTabResponse(checkedTab, method) {
+    await ContentTask.spawn(checkedTab.linkedBrowser, method, async function(met) {
+      let { body } = content.wrappedJSObject.document;
+      let responseRE = RegExp(met + (met == "POST" ? "\n*\s*foo\=bar\&amp;baz\=42" : ""));
+      ok(body.innerHTML.match(responseRE), "Tab method and data match original request");
+    });
+  }
 });
--- a/devtools/client/netmonitor/test/head.js
+++ b/devtools/client/netmonitor/test/head.js
@@ -58,26 +58,28 @@ const INFINITE_GET_URL = EXAMPLE_URL + "
 const CUSTOM_GET_URL = EXAMPLE_URL + "html_custom-get-page.html";
 const SINGLE_GET_URL = EXAMPLE_URL + "html_single-get-page.html";
 const STATISTICS_URL = EXAMPLE_URL + "html_statistics-test-page.html";
 const CURL_URL = EXAMPLE_URL + "html_copy-as-curl.html";
 const CURL_UTILS_URL = EXAMPLE_URL + "html_curl-utils.html";
 const SEND_BEACON_URL = EXAMPLE_URL + "html_send-beacon.html";
 const CORS_URL = EXAMPLE_URL + "html_cors-test-page.html";
 const PAUSE_URL = EXAMPLE_URL + "html_pause-test-page.html";
+const OPEN_REQUEST_IN_TAB_URL = EXAMPLE_URL + "html_open-request-in-tab.html";
 
 const SIMPLE_SJS = EXAMPLE_URL + "sjs_simple-test-server.sjs";
 const SIMPLE_UNSORTED_COOKIES_SJS = EXAMPLE_URL + "sjs_simple-unsorted-cookies-test-server.sjs";
 const CONTENT_TYPE_SJS = EXAMPLE_URL + "sjs_content-type-test-server.sjs";
 const HTTPS_CONTENT_TYPE_SJS = HTTPS_EXAMPLE_URL + "sjs_content-type-test-server.sjs";
 const STATUS_CODES_SJS = EXAMPLE_URL + "sjs_status-codes-test-server.sjs";
 const SORTING_SJS = EXAMPLE_URL + "sjs_sorting-test-server.sjs";
 const HTTPS_REDIRECT_SJS = EXAMPLE_URL + "sjs_https-redirect-test-server.sjs";
 const CORS_SJS_PATH = "/browser/devtools/client/netmonitor/test/sjs_cors-test-server.sjs";
 const HSTS_SJS = EXAMPLE_URL + "sjs_hsts-test-server.sjs";
+const METHOD_SJS = EXAMPLE_URL + "sjs_method-test-server.sjs";
 
 const HSTS_BASE_URL = EXAMPLE_URL;
 const HSTS_PAGE_URL = CUSTOM_GET_URL;
 
 const TEST_IMAGE = EXAMPLE_URL + "test-image.png";
 const TEST_IMAGE_DATA_URI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg==";
 
 /* eslint-enable no-unused-vars, max-len */
new file mode 100644
--- /dev/null
+++ b/devtools/client/netmonitor/test/html_open-request-in-tab.html
@@ -0,0 +1,31 @@
+<!-- Any copyright is dedicated to the Public Domain.
+http://creativecommons.org/publicdomain/zero/1.0/ -->
+<!doctype html>
+
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
+    <meta http-equiv="Pragma" content="no-cache" />
+    <meta http-equiv="Expires" content="0" />
+    <title>Network Monitor test page</title>
+  </head>
+
+  <body>
+    <p>Performing a GET or POST request</p>
+
+    <script type="text/javascript">
+      /* exported performRequest */
+      "use strict";
+
+      function performRequest(method) {
+        let xhr = new XMLHttpRequest();
+        let url = "sjs_method-test-server.sjs";
+        let payload = method == "POST" ? "foo=bar&baz=42" : null;
+        xhr.open(method, url, true);
+        xhr.setRequestHeader("Accept-Language", window.navigator.language);
+        xhr.send(payload);
+      }
+    </script>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/devtools/client/netmonitor/test/sjs_method-test-server.sjs
@@ -0,0 +1,24 @@
+/* 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/. */
+
+const CC = Components.Constructor;
+const BinaryInputStream = CC("@mozilla.org/binaryinputstream;1",
+  "nsIBinaryInputStream",
+  "setInputStream");
+
+function handleRequest(request, response) {
+  response.setStatusLine(request.httpVersion, 200, "Och Aye");
+  response.setHeader("Content-Type", "text/plain; charset=utf-8", false);
+
+  var body = request.method + "\n" ;
+  if (request.method == "POST") {
+    var bodyStream = new BinaryInputStream(request.bodyInputStream);
+    var bytes = [], avail = 0;
+    while ((avail = bodyStream.available()) > 0) {
+      body += String.fromCharCode.apply(String, bodyStream.readByteArray(avail));
+    }
+  }
+
+  response.bodyOutputStream.write(body, body.length);
+}
--- a/devtools/server/actors/object.js
+++ b/devtools/server/actors/object.js
@@ -1207,17 +1207,17 @@ function SymbolIteratorActor(objectActor
   }
 
   this.iterator = {
     size: symbols.length,
     symbolDescription(index) {
       const symbol = symbols[index];
       return {
         name: symbol.toString(),
-        descriptor: objectActor._propertyDescriptor(symbol, true)
+        descriptor: objectActor._propertyDescriptor(symbol)
       };
     }
   };
 }
 
 SymbolIteratorActor.prototype = {
   actorPrefix: "symbolIterator",
 
new file mode 100644
--- /dev/null
+++ b/devtools/server/tests/unit/test_objectgrips-22.js
@@ -0,0 +1,52 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+/* eslint-disable no-shadow, max-nested-callbacks */
+
+"use strict";
+
+var gDebuggee;
+var gThreadClient;
+
+add_task(async function run_test() {
+  await run_test_with_server(DebuggerServer);
+  await run_test_with_server(WorkerDebuggerServer);
+});
+
+async function run_test_with_server(server) {
+  initTestDebuggerServer(server);
+  let title = "test_enum_symbols";
+  gDebuggee = addTestGlobal(title, server);
+  gDebuggee.eval(function stopMe(arg) {
+    debugger;
+  }.toString());
+  let client = new DebuggerClient(server.connectPipe());
+  await client.connect();
+  [,, gThreadClient] = await attachTestTabAndResume(client, title);
+  await test_enum_symbols();
+  await client.close();
+}
+
+async function test_enum_symbols() {
+  await new Promise(function(resolve) {
+    gThreadClient.addOneTimeListener("paused", async function(event, packet) {
+      let [grip] = packet.frame.arguments;
+      let objClient = gThreadClient.pauseGrip(grip);
+      let {iterator} = await objClient.enumSymbols();
+      let {ownSymbols} = await iterator.slice(0, iterator.count);
+
+      strictEqual(ownSymbols.length, 1, "There is 1 symbol property.");
+      let {name, descriptor} = ownSymbols[0];
+      strictEqual(name, "Symbol(sym)", "Got right symbol name.");
+      deepEqual(descriptor, {
+        configurable: false,
+        enumerable: false,
+        writable: false,
+        value: 1,
+      }, "Got right property descriptor.");
+
+      await gThreadClient.resume();
+      resolve();
+    });
+    gDebuggee.eval(`stopMe(Object.defineProperty({}, Symbol("sym"), {value: 1}));`);
+  });
+}
--- a/devtools/server/tests/unit/xpcshell.ini
+++ b/devtools/server/tests/unit/xpcshell.ini
@@ -169,16 +169,17 @@ reason = bug 1104838
 [test_objectgrips-14.js]
 [test_objectgrips-15.js]
 [test_objectgrips-16.js]
 [test_objectgrips-17.js]
 [test_objectgrips-18.js]
 [test_objectgrips-19.js]
 [test_objectgrips-20.js]
 [test_objectgrips-21.js]
+[test_objectgrips-22.js]
 [test_objectgrips-array-like-object.js]
 [test_promise_state-01.js]
 [test_promise_state-02.js]
 [test_promise_state-03.js]
 [test_interrupt.js]
 [test_stepping-01.js]
 [test_stepping-02.js]
 [test_stepping-03.js]
--- a/dom/base/CustomElementRegistry.cpp
+++ b/dom/base/CustomElementRegistry.cpp
@@ -677,18 +677,20 @@ CustomElementRegistry::Define(const nsAS
     aRv.ThrowTypeError<MSG_NOT_CONSTRUCTOR>(NS_LITERAL_STRING("Argument 2 of CustomElementRegistry.define"));
     return;
   }
 
   /**
    * 2. If name is not a valid custom element name, then throw a "SyntaxError"
    *    DOMException and abort these steps.
    */
+  nsIDocument* doc = mWindow->GetExtantDoc();
+  uint32_t nameSpaceID = doc ? doc->GetDefaultNamespaceID() : kNameSpaceID_XHTML;
   RefPtr<nsAtom> nameAtom(NS_Atomize(aName));
-  if (!nsContentUtils::IsCustomElementName(nameAtom)) {
+  if (!nsContentUtils::IsCustomElementName(nameAtom, nameSpaceID)) {
     aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
     return;
   }
 
   /**
    * 3. If this CustomElementRegistry contains an entry with name name, then
    *    throw a "NotSupportedError" DOMException and abort these steps.
    */
@@ -720,17 +722,17 @@ CustomElementRegistry::Define(const nsAS
    *       HTMLUnknownElement (e.g., if extends does not indicate an element
    *       definition in this specification), then throw a "NotSupportedError"
    *       DOMException.
    *    3. Set localName to extends.
    */
   nsAutoString localName(aName);
   if (aOptions.mExtends.WasPassed()) {
     RefPtr<nsAtom> extendsAtom(NS_Atomize(aOptions.mExtends.Value()));
-    if (nsContentUtils::IsCustomElementName(extendsAtom)) {
+    if (nsContentUtils::IsCustomElementName(extendsAtom, nameSpaceID)) {
       aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR);
       return;
     }
 
     // bgsound and multicol are unknown html element.
     int32_t tag = nsHTMLTags::CaseSensitiveAtomTagToId(extendsAtom);
     if (tag == eHTMLTag_userdefined ||
         tag == eHTMLTag_bgsound ||
@@ -960,17 +962,19 @@ CustomElementRegistry::WhenDefined(const
   nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(mWindow);
   RefPtr<Promise> promise = Promise::Create(global, aRv);
 
   if (aRv.Failed()) {
     return nullptr;
   }
 
   RefPtr<nsAtom> nameAtom(NS_Atomize(aName));
-  if (!nsContentUtils::IsCustomElementName(nameAtom)) {
+  nsIDocument* doc = mWindow->GetExtantDoc();
+  uint32_t nameSpaceID = doc ? doc->GetDefaultNamespaceID() : kNameSpaceID_XHTML;
+  if (!nsContentUtils::IsCustomElementName(nameAtom, nameSpaceID)) {
     promise->MaybeReject(NS_ERROR_DOM_SYNTAX_ERR);
     return promise.forget();
   }
 
   if (mCustomDefinitions.GetWeak(nameAtom)) {
     promise->MaybeResolve(JS::UndefinedHandleValue);
     return promise.forget();
   }
--- a/dom/base/Element.cpp
+++ b/dom/base/Element.cpp
@@ -1191,17 +1191,17 @@ Element::AttachShadow(const ShadowRootIn
   /**
    * 2. If context object’s local name is not
    *      a valid custom element name, "article", "aside", "blockquote",
    *      "body", "div", "footer", "h1", "h2", "h3", "h4", "h5", "h6",
    *      "header", "main" "nav", "p", "section", or "span",
    *    then throw a "NotSupportedError" DOMException.
    */
   nsAtom* nameAtom = NodeInfo()->NameAtom();
-  if (!(nsContentUtils::IsCustomElementName(nameAtom) ||
+  if (!(nsContentUtils::IsCustomElementName(nameAtom, NodeInfo()->NamespaceID()) ||
         nameAtom == nsGkAtoms::article ||
         nameAtom == nsGkAtoms::aside ||
         nameAtom == nsGkAtoms::blockquote ||
         nameAtom == nsGkAtoms::body ||
         nameAtom == nsGkAtoms::div ||
         nameAtom == nsGkAtoms::footer ||
         nameAtom == nsGkAtoms::h1 ||
         nameAtom == nsGkAtoms::h2 ||
@@ -4303,17 +4303,17 @@ Element::ClearServoData(nsIDocument* aDo
 void
 Element::SetCustomElementData(CustomElementData* aData)
 {
   nsExtendedDOMSlots *slots = ExtendedDOMSlots();
   MOZ_ASSERT(!slots->mCustomElementData, "Custom element data may not be changed once set.");
   #if DEBUG
     nsAtom* name = NodeInfo()->NameAtom();
     nsAtom* type = aData->GetCustomElementType();
-    if (nsContentUtils::IsCustomElementName(name)) {
+    if (nsContentUtils::IsCustomElementName(name, NodeInfo()->NamespaceID())) {
       MOZ_ASSERT(type == name);
     } else {
       MOZ_ASSERT(type != name);
     }
   #endif
   slots->mCustomElementData = aData;
 }
 
--- a/dom/base/nsContentAreaDragDrop.cpp
+++ b/dom/base/nsContentAreaDragDrop.cpp
@@ -72,19 +72,21 @@ public:
                    nsISelection** aSelection,
                    nsIContent** aDragNode,
                    nsACString& aPrincipalURISpec);
 
 private:
   void AddString(DataTransfer* aDataTransfer,
                  const nsAString& aFlavor,
                  const nsAString& aData,
-                 nsIPrincipal* aPrincipal);
+                 nsIPrincipal* aPrincipal,
+                 bool aHidden=false);
   nsresult AddStringsToDataTransfer(nsIContent* aDragNode,
                                     DataTransfer* aDataTransfer);
+  nsresult GetImageData(imgIContainer* aImage, imgIRequest* aRequest);
   static nsresult GetDraggableSelectionData(nsISelection* inSelection,
                                             nsIContent* inRealTargetNode,
                                             nsIContent **outImageOrLinkNode,
                                             bool* outDragSelectedText);
   static already_AddRefed<nsIContent> FindParentLinkNode(nsIContent* inNode);
   static MOZ_MUST_USE nsresult
   GetAnchorURL(nsIContent* inNode, nsAString& outURL);
   static void GetNodeString(nsIContent* inNode, nsAString & outNodeString);
@@ -94,16 +96,19 @@ private:
   nsCOMPtr<nsPIDOMWindowOuter> mWindow;
   nsCOMPtr<nsIContent> mTarget;
   nsCOMPtr<nsIContent> mSelectionTargetNode;
   bool mIsAltKeyPressed;
 
   nsString mUrlString;
   nsString mImageSourceString;
   nsString mImageDestFileName;
+#if defined (XP_MACOSX)
+  nsString mImageRequestMime;
+#endif
   nsString mTitleString;
   // will be filled automatically if you fill urlstring
   nsString mHtmlString;
   nsString mContextString;
   nsString mInfoString;
 
   bool mIsAnchor;
   nsCOMPtr<imgIContainer> mImage;
@@ -133,50 +138,88 @@ nsContentAreaDragDrop::GetDragData(nsPID
 
 
 NS_IMPL_ISUPPORTS(nsContentAreaDragDropDataProvider, nsIFlavorDataProvider)
 
 // SaveURIToFile
 // used on platforms where it's possible to drag items (e.g. images)
 // into the file system
 nsresult
-nsContentAreaDragDropDataProvider::SaveURIToFile(nsAString& inSourceURIString,
+nsContentAreaDragDropDataProvider::SaveURIToFile(nsIURI* inSourceURI,
                                                  nsIFile* inDestFile,
                                                  bool isPrivate)
 {
-  nsCOMPtr<nsIURI> sourceURI;
-  nsresult rv = NS_NewURI(getter_AddRefs(sourceURI), inSourceURIString);
-  if (NS_FAILED(rv)) {
-    return NS_ERROR_FAILURE;
-  }
-
-  nsCOMPtr<nsIURL> sourceURL = do_QueryInterface(sourceURI);
+  nsCOMPtr<nsIURL> sourceURL = do_QueryInterface(inSourceURI);
   if (!sourceURL) {
     return NS_ERROR_NO_INTERFACE;
   }
 
-  rv = inDestFile->CreateUnique(nsIFile::NORMAL_FILE_TYPE, 0600);
+  nsresult rv = inDestFile->CreateUnique(nsIFile::NORMAL_FILE_TYPE, 0600);
   NS_ENSURE_SUCCESS(rv, rv);
 
   // we rely on the fact that the WPB is refcounted by the channel etc,
   // so we don't keep a ref to it. It will die when finished.
   nsCOMPtr<nsIWebBrowserPersist> persist =
     do_CreateInstance("@mozilla.org/embedding/browser/nsWebBrowserPersist;1",
                       &rv);
   NS_ENSURE_SUCCESS(rv, rv);
 
   persist->SetPersistFlags(nsIWebBrowserPersist::PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION);
 
   // referrer policy can be anything since the referrer is nullptr
-  return persist->SavePrivacyAwareURI(sourceURI, nullptr, nullptr,
+  return persist->SavePrivacyAwareURI(inSourceURI, nullptr, nullptr,
                                       mozilla::net::RP_Unset,
                                       nullptr, nullptr,
                                       inDestFile, isPrivate);
 }
 
+/*
+ * Check if the provided filename extension is valid for the MIME type and
+ * return the MIME type's primary extension.
+ *
+ * @param aExtension           [in]  the extension to check
+ * @param aMimeType            [in]  the MIME type to check the extension with
+ * @param aIsValidExtension    [out] true if |aExtension| is valid for
+ *                                   |aMimeType|
+ * @param aPrimaryExtension    [out] the primary extension for the MIME type
+ *                                   to potentially be used as a replacement
+ *                                   for |aExtension|
+ */
+nsresult
+CheckAndGetExtensionForMime(const nsCString& aExtension,
+                            const nsCString& aMimeType,
+                            bool* aIsValidExtension,
+                            nsACString* aPrimaryExtension)
+{
+  nsresult rv;
+
+  nsCOMPtr<nsIMIMEService> mimeService = do_GetService("@mozilla.org/mime;1");
+  if (NS_WARN_IF(!mimeService)) {
+    return NS_ERROR_FAILURE;
+  }
+
+  nsCOMPtr<nsIMIMEInfo> mimeInfo;
+  rv = mimeService->GetFromTypeAndExtension(aMimeType, EmptyCString(),
+                                            getter_AddRefs(mimeInfo));
+  NS_ENSURE_SUCCESS(rv, rv);
+
+  rv = mimeInfo->GetPrimaryExtension(*aPrimaryExtension);
+  NS_ENSURE_SUCCESS(rv, rv);
+
+  if (aExtension.IsEmpty()) {
+    *aIsValidExtension = false;
+    return NS_OK;
+  }
+
+  rv = mimeInfo->ExtensionExists(aExtension, aIsValidExtension);
+  NS_ENSURE_SUCCESS(rv, rv);
+
+  return NS_OK;
+}
+
 // This is our nsIFlavorDataProvider callback. There are several
 // assumptions here that make this work:
 //
 // 1. Someone put a kFilePromiseURLMime flavor into the transferable
 //    with the source URI of the file to save (as a string). We did
 //    that in AddStringsToDataTransfer.
 //
 // 2. Someone put a kFilePromiseDirectoryMime flavor into the
@@ -209,27 +252,85 @@ nsContentAreaDragDropDataProvider::GetFl
     if (!supportsString)
       return NS_ERROR_FAILURE;
 
     nsAutoString sourceURLString;
     supportsString->GetData(sourceURLString);
     if (sourceURLString.IsEmpty())
       return NS_ERROR_FAILURE;
 
+    nsCOMPtr<nsIURI> sourceURI;
+    rv = NS_NewURI(getter_AddRefs(sourceURI), sourceURLString);
+    NS_ENSURE_SUCCESS(rv, rv);
+
     aTransferable->GetTransferData(kFilePromiseDestFilename,
                                    getter_AddRefs(tmp), &dataSize);
     supportsString = do_QueryInterface(tmp);
     if (!supportsString)
       return NS_ERROR_FAILURE;
 
     nsAutoString targetFilename;
     supportsString->GetData(targetFilename);
     if (targetFilename.IsEmpty())
       return NS_ERROR_FAILURE;
 
+#if defined(XP_MACOSX)
+    // Use the image request's MIME type to ensure the filename's
+    // extension is compatible with the OS's handler for this type.
+    // If it isn't, or is missing, replace the extension with the
+    // primary extension. On Mac, do this in the parent process
+    // because sandboxing blocks access to MIME-handler info from
+    // content processes.
+    if (XRE_IsParentProcess()) {
+      aTransferable->GetTransferData(kImageRequestMime,
+                                     getter_AddRefs(tmp), &dataSize);
+      supportsString = do_QueryInterface(tmp);
+      if (!supportsString)
+        return NS_ERROR_FAILURE;
+
+      nsAutoString imageRequestMime;
+      supportsString->GetData(imageRequestMime);
+
+      // If we have a MIME type, check the extension is compatible
+      if (!imageRequestMime.IsEmpty()) {
+        // Build a URL to get the filename extension
+        nsCOMPtr<nsIURL> imageURL = do_QueryInterface(sourceURI, &rv);
+        NS_ENSURE_SUCCESS(rv, rv);
+
+        nsAutoCString extension;
+        rv = imageURL->GetFileExtension(extension);
+        NS_ENSURE_SUCCESS(rv, rv);
+
+        NS_ConvertUTF16toUTF8 mimeCString(imageRequestMime);
+        bool isValidExtension;
+        nsAutoCString primaryExtension;
+        rv = CheckAndGetExtensionForMime(extension,
+                                         mimeCString,
+                                         &isValidExtension,
+                                         &primaryExtension);
+        NS_ENSURE_SUCCESS(rv, rv);
+
+        if (!isValidExtension) {
+          // The filename extension is missing or incompatible
+          // with the MIME type, replace it with the primary
+          // extension.
+          nsAutoCString newFileName;
+          rv = imageURL->GetFileBaseName(newFileName);
+          NS_ENSURE_SUCCESS(rv, rv);
+          newFileName.Append(".");
+          newFileName.Append(primaryExtension);
+          targetFilename = NS_ConvertUTF8toUTF16(newFileName);
+        }
+      }
+    }
+    // make the filename safe for the filesystem
+    targetFilename.ReplaceChar(FILE_PATH_SEPARATOR FILE_ILLEGAL_CHARACTERS,
+                               '-');
+#endif /* defined(XP_MACOSX) */
+
     // get the target directory from the kFilePromiseDirectoryMime
     // flavor
     nsCOMPtr<nsISupports> dirPrimitive;
     dataSize = 0;
     aTransferable->GetTransferData(kFilePromiseDirectoryMime,
                                    getter_AddRefs(dirPrimitive), &dataSize);
     nsCOMPtr<nsIFile> destDirectory = do_QueryInterface(dirPrimitive);
     if (!destDirectory)
@@ -239,17 +340,17 @@ nsContentAreaDragDropDataProvider::GetFl
     rv = destDirectory->Clone(getter_AddRefs(file));
     NS_ENSURE_SUCCESS(rv, rv);
 
     file->Append(targetFilename);
 
     bool isPrivate;
     aTransferable->GetIsPrivateData(&isPrivate);
 
-    rv = SaveURIToFile(sourceURLString, file, isPrivate);
+    rv = SaveURIToFile(sourceURI, file, isPrivate);
     // send back an nsIFile
     if (NS_SUCCEEDED(rv)) {
       CallQueryInterface(file, aData);
       *aDataLen = sizeof(nsIFile*);
     }
   }
 
   return rv;
@@ -358,16 +459,90 @@ DragDataProducer::GetNodeString(nsIConte
   RefPtr<nsRange> range = doc->CreateRange(IgnoreErrors());
   if (range) {
     range->SelectNode(*node, IgnoreErrors());
     range->ToString(outNodeString, IgnoreErrors());
   }
 }
 
 nsresult
+DragDataProducer::GetImageData(imgIContainer* aImage, imgIRequest* aRequest)
+{
+  nsCOMPtr<nsIURI> imgUri;
+  aRequest->GetURI(getter_AddRefs(imgUri));
+
+  nsCOMPtr<nsIURL> imgUrl(do_QueryInterface(imgUri));
+  if (imgUrl) {
+    nsAutoCString spec;
+    nsresult rv = imgUrl->GetSpec(spec);
+    NS_ENSURE_SUCCESS(rv, rv);
+
+    // pass out the image source string
+    CopyUTF8toUTF16(spec, mImageSourceString);
+
+    nsCString mimeType;
+    aRequest->GetMimeType(getter_Copies(mimeType));
+
+#if defined(XP_MACOSX)
+    // Save the MIME type so we can make sure the extension
+    // is compatible (and replace it if it isn't) when the
+    // image is dropped. On Mac, we need to get the OS MIME
+    // handler information in the parent due to sandboxing.
+    CopyUTF8toUTF16(mimeType, mImageRequestMime);
+#else
+    nsCOMPtr<nsIMIMEService> mimeService = do_GetService("@mozilla.org/mime;1");
+    if (NS_WARN_IF(!mimeService)) {
+      return NS_ERROR_FAILURE;
+    }
+
+    nsCOMPtr<nsIMIMEInfo> mimeInfo;
+    mimeService->GetFromTypeAndExtension(mimeType, EmptyCString(),
+					 getter_AddRefs(mimeInfo));
+    if (mimeInfo) {
+      nsAutoCString extension;
+      imgUrl->GetFileExtension(extension);
+
+      bool validExtension;
+      if (extension.IsEmpty() ||
+          NS_FAILED(mimeInfo->ExtensionExists(extension,
+                                              &validExtension)) ||
+          !validExtension) {
+        // Fix the file extension in the URL
+        nsAutoCString primaryExtension;
+        mimeInfo->GetPrimaryExtension(primaryExtension);
+
+        rv = NS_MutateURI(imgUrl)
+               .Apply(NS_MutatorMethod(&nsIURLMutator::SetFileExtension,
+                                       primaryExtension, nullptr))
+               .Finalize(imgUrl);
+        NS_ENSURE_SUCCESS(rv, rv);
+      }
+    }
+#endif /* defined(XP_MACOSX) */
+
+    nsAutoCString fileName;
+    imgUrl->GetFileName(fileName);
+
+    NS_UnescapeURL(fileName);
+
+#if !defined(XP_MACOSX)
+    // make the filename safe for the filesystem
+    fileName.ReplaceChar(FILE_PATH_SEPARATOR FILE_ILLEGAL_CHARACTERS, '-');
+#endif
+
+    CopyUTF8toUTF16(fileName, mImageDestFileName);
+
+    // and the image object
+    mImage = aImage;
+  }
+
+  return NS_OK;
+}
+
+nsresult
 DragDataProducer::Produce(DataTransfer* aDataTransfer,
                           bool* aCanDrag,
                           nsISelection** aSelection,
                           nsIContent** aDragNode,
                           nsACString& aPrincipalURISpec)
 {
   NS_PRECONDITION(aCanDrag && aSelection && aDataTransfer && aDragNode,
                   "null pointer passed to Produce");
@@ -559,77 +734,19 @@ DragDataProducer::Produce(DataTransfer* 
         }
 
         nsCOMPtr<imgIRequest> imgRequest;
 
         // grab the image data, and its request.
         nsCOMPtr<imgIContainer> img =
           nsContentUtils::GetImageFromContent(image,
                                               getter_AddRefs(imgRequest));
-
-        nsCOMPtr<nsIMIMEService> mimeService =
-          do_GetService("@mozilla.org/mime;1");
-
-        // Fix the file extension in the URL if necessary
-        if (imgRequest && mimeService) {
-          nsCOMPtr<nsIURI> imgUri;
-          imgRequest->GetURI(getter_AddRefs(imgUri));
-
-          nsCOMPtr<nsIURL> imgUrl(do_QueryInterface(imgUri));
-
-          if (imgUrl) {
-            nsAutoCString extension;
-            imgUrl->GetFileExtension(extension);
-
-            nsCString mimeType;
-            imgRequest->GetMimeType(getter_Copies(mimeType));
-
-            nsCOMPtr<nsIMIMEInfo> mimeInfo;
-            mimeService->GetFromTypeAndExtension(mimeType, EmptyCString(),
-                                                 getter_AddRefs(mimeInfo));
-
-            if (mimeInfo) {
-              nsAutoCString spec;
-              rv = imgUrl->GetSpec(spec);
-              NS_ENSURE_SUCCESS(rv, rv);
-
-              // pass out the image source string
-              CopyUTF8toUTF16(spec, mImageSourceString);
-
-              bool validExtension;
-              if (extension.IsEmpty() ||
-                  NS_FAILED(mimeInfo->ExtensionExists(extension,
-                                                      &validExtension)) ||
-                  !validExtension) {
-                // Fix the file extension in the URL
-                nsAutoCString primaryExtension;
-                mimeInfo->GetPrimaryExtension(primaryExtension);
-
-                rv = NS_MutateURI(imgUrl)
-                       .Apply(NS_MutatorMethod(&nsIURLMutator::SetFileExtension,
-                                               primaryExtension, nullptr))
-                       .Finalize(imgUrl);
-                NS_ENSURE_SUCCESS(rv, rv);
-              }
-
-              nsAutoCString fileName;
-              imgUrl->GetFileName(fileName);
-
-              NS_UnescapeURL(fileName);
-
-              // make the filename safe for the filesystem
-              fileName.ReplaceChar(FILE_PATH_SEPARATOR FILE_ILLEGAL_CHARACTERS,
-                                   '-');
-
-              CopyUTF8toUTF16(fileName, mImageDestFileName);
-
-              // and the image object
-              mImage = img;
-            }
-          }
+        if (imgRequest) {
+          rv = GetImageData(img, imgRequest);
+          NS_ENSURE_SUCCESS(rv, rv);
         }
 
         if (parentLink) {
           // If we are dragging around an image in an anchor, then we
           // are dragging the entire anchor
           linkNode = parentLink;
           nodeToSerialize = linkNode;
         } else {
@@ -725,21 +842,22 @@ DragDataProducer::Produce(DataTransfer* 
   NS_IF_ADDREF(*aDragNode = dragNode);
   return NS_OK;
 }
 
 void
 DragDataProducer::AddString(DataTransfer* aDataTransfer,
                             const nsAString& aFlavor,
                             const nsAString& aData,
-                            nsIPrincipal* aPrincipal)
+                            nsIPrincipal* aPrincipal,
+                            bool aHidden)
 {
   RefPtr<nsVariantCC> variant = new nsVariantCC();
   variant->SetAsAString(aData);
-  aDataTransfer->SetDataWithPrincipal(aFlavor, variant, 0, aPrincipal);
+  aDataTransfer->SetDataWithPrincipal(aFlavor, variant, 0, aPrincipal, aHidden);
 }
 
 nsresult
 DragDataProducer::AddStringsToDataTransfer(nsIContent* aDragNode,
                                            DataTransfer* aDataTransfer)
 {
   NS_ASSERTION(aDragNode, "adding strings for null node");
 
@@ -805,16 +923,20 @@ DragDataProducer::AddStringsToDataTransf
       aDataTransfer->SetDataWithPrincipal(NS_LITERAL_STRING(kFilePromiseMime),
                                           variant, 0, principal);
     }
 
     AddString(aDataTransfer, NS_LITERAL_STRING(kFilePromiseURLMime),
               mImageSourceString, principal);
     AddString(aDataTransfer, NS_LITERAL_STRING(kFilePromiseDestFilename),
               mImageDestFileName, principal);
+#if defined(XP_MACOSX)
+    AddString(aDataTransfer, NS_LITERAL_STRING(kImageRequestMime),
+              mImageRequestMime, principal, /* aHidden= */ true);
+#endif
 
     // if not an anchor, add the image url
     if (!mIsAnchor) {
       AddString(aDataTransfer, NS_LITERAL_STRING(kURLDataMime), mUrlString, principal);
       AddString(aDataTransfer, NS_LITERAL_STRING("text/uri-list"), mUrlString, principal);
     }
   }
 
--- a/dom/base/nsContentAreaDragDrop.h
+++ b/dom/base/nsContentAreaDragDrop.h
@@ -71,15 +71,15 @@ public:
 class nsContentAreaDragDropDataProvider : public nsIFlavorDataProvider
 {
   virtual ~nsContentAreaDragDropDataProvider() {}
 
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_NSIFLAVORDATAPROVIDER
 
-  nsresult SaveURIToFile(nsAString& inSourceURIString,
+  nsresult SaveURIToFile(nsIURI* inSourceURI,
                          nsIFile* inDestFile, bool isPrivate);
 };
 
 
 #endif /* nsContentAreaDragDrop_h__ */
 
--- a/dom/base/nsContentUtils.cpp
+++ b/dom/base/nsContentUtils.cpp
@@ -3189,18 +3189,23 @@ nsContentUtils::NewURIWithDocumentCharse
                      aDocument->GetDocumentCharacterSet(),
                      aBaseURI, sIOService);
   }
   return NS_NewURI(aResult, aSpec, nullptr, aBaseURI, sIOService);
 }
 
 // static
 bool
-nsContentUtils::IsCustomElementName(nsAtom* aName)
-{
+nsContentUtils::IsCustomElementName(nsAtom* aName, uint32_t aNameSpaceID)
+{
+  // Allow non-dashed names in XUL for XBL to Custom Element migrations.
+  if (aNameSpaceID == kNameSpaceID_XUL) {
+    return true;
+  }
+
   // A valid custom element name is a sequence of characters name which
   // must match the PotentialCustomElementName production:
   // PotentialCustomElementName ::= [a-z] (PCENChar)* '-' (PCENChar)*
   const char16_t* name = aName->GetUTF16String();
   uint32_t len = aName->GetLength();
   bool hasDash = false;
 
   if (!len || name[0] < 'a' || name[0] > 'z') {
@@ -5086,17 +5091,18 @@ nsContentUtils::ParseFragmentHTML(const 
     // Now sHTMLFragmentParser owns the object
   }
 
   nsIContent* target = aTargetNode;
 
   // If this is a chrome-privileged document, create a fragment first, and
   // sanitize it before insertion.
   RefPtr<DocumentFragment> fragment;
-  if (aSanitize != NeverSanitize && !aTargetNode->OwnerDoc()->AllowUnsafeHTML()) {
+  if (aSanitize != NeverSanitize &&
+      IsSystemPrincipal(aTargetNode->NodePrincipal())) {
     fragment = new DocumentFragment(aTargetNode->OwnerDoc()->NodeInfoManager());
     target = fragment;
   }
 
   nsresult rv =
     sHTMLFragmentParser->ParseFragment(aSourceBuffer,
                                        target,
                                        aContextLocalName,
@@ -5193,17 +5199,18 @@ nsContentUtils::ParseFragmentXML(const n
 
   rv = sXMLFragmentSink->FinishFragmentParsing(aReturn);
 
   sXMLFragmentParser->Reset();
   NS_ENSURE_SUCCESS(rv, rv);
 
   // If this is a chrome-privileged document, sanitize the fragment before
   // returning.
-  if (aSanitize != NeverSanitize && !aDocument->AllowUnsafeHTML()) {
+  if (aSanitize != NeverSanitize &&
+      IsSystemPrincipal(aDocument->NodePrincipal())) {
     // Don't fire mutation events for nodes removed by the sanitizer.
     nsAutoScriptBlockerSuppressNodeRemoved scriptBlocker;
 
     RefPtr<DocumentFragment> fragment = static_cast<DocumentFragment*>(*aReturn);
 
     nsTreeSanitizer sanitizer(nsIParserUtils::SanitizerAllowStyle |
                               nsIParserUtils::SanitizerAllowComments |
                               nsIParserUtils::SanitizerDropForms |
@@ -9973,19 +9980,19 @@ nsContentUtils::NewXULOrHTMLElement(Elem
              "Can only create XUL or XHTML elements.");
 
   nsAtom *name = nodeInfo->NameAtom();
   int32_t tag = eHTMLTag_unknown;
   bool isCustomElementName = false;
   if (nodeInfo->NamespaceEquals(kNameSpaceID_XHTML)) {
     tag = nsHTMLTags::CaseSensitiveAtomTagToId(name);
     isCustomElementName = (tag == eHTMLTag_userdefined &&
-                           nsContentUtils::IsCustomElementName(name));
+                           nsContentUtils::IsCustomElementName(name, kNameSpaceID_XHTML));
   } else {
-    isCustomElementName = nsContentUtils::IsCustomElementName(name);
+    isCustomElementName = nsContentUtils::IsCustomElementName(name, kNameSpaceID_XUL);
   }
 
   RefPtr<nsAtom> tagAtom = nodeInfo->NameAtom();
   RefPtr<nsAtom> typeAtom;
   bool isCustomElement = isCustomElementName || aIsAtom;
   if (isCustomElement) {
     typeAtom = isCustomElementName ? tagAtom.get() : aIsAtom;
   }
--- a/dom/base/nsContentUtils.h
+++ b/dom/base/nsContentUtils.h
@@ -705,17 +705,17 @@ public:
                                             const nsAString& aSpec,
                                             nsIDocument* aDocument,
                                             nsIURI* aBaseURI);
 
   /**
    * Returns true if |aName| is a valid name to be registered via
    * customElements.define.
    */
-  static bool IsCustomElementName(nsAtom* aName);
+  static bool IsCustomElementName(nsAtom* aName, uint32_t aNameSpaceID);
 
   static nsresult CheckQName(const nsAString& aQualifiedName,
                              bool aNamespaceAware = true,
                              const char16_t** aColon = nullptr);
 
   static nsresult SplitQName(const nsIContent* aNamespaceResolver,
                              const nsString& aQName,
                              int32_t *aNamespace, nsAtom **aLocalName);
--- a/dom/base/nsDocument.cpp
+++ b/dom/base/nsDocument.cpp
@@ -1428,17 +1428,16 @@ nsIDocument::nsIDocument()
     mFrameRequestCallbacksScheduled(false),
     mIsTopLevelContentDocument(false),
     mIsContentDocument(false),
     mDidCallBeginLoad(false),
     mAllowPaymentRequest(false),
     mEncodingMenuDisabled(false),
     mIsShadowDOMEnabled(false),
     mIsSVGGlyphsDocument(false),
-    mAllowUnsafeHTML(false),
     mInDestructor(false),
     mIsGoingAway(false),
     mInXBLUpdate(false),
     mNeedsReleaseAfterStackRefCntRelease(false),
     mStyleSetFilled(false),
     mSSApplicableStateNotificationPending(false),
     mMayHaveTitleElement(false),
     mDOMLoadingSet(false),
@@ -5860,23 +5859,16 @@ nsIDocument::CreateAttributeNS(const nsA
     return nullptr;
   }
 
   RefPtr<Attr> attribute = new Attr(nullptr, nodeInfo.forget(),
                                     EmptyString());
   return attribute.forget();
 }
 
-bool
-nsIDocument::AllowUnsafeHTML() const
-{
-  return (!nsContentUtils::IsSystemPrincipal(NodePrincipal()) ||
-          mAllowUnsafeHTML);
-}
-
 void
 nsIDocument::ResolveScheduledSVGPresAttrs()
 {
   for (auto iter = mLazySVGPresElements.Iter(); !iter.Done(); iter.Next()) {
     nsSVGElement* svg = iter.Get()->GetKey();
     svg->UpdateContentDeclarationBlock();
   }
   mLazySVGPresElements.Clear();
--- a/dom/base/nsIDocument.h
+++ b/dom/base/nsIDocument.h
@@ -3158,18 +3158,16 @@ public:
   already_AddRefed<mozilla::dom::CDATASection>
     CreateCDATASection(const nsAString& aData, mozilla::ErrorResult& rv);
   already_AddRefed<mozilla::dom::Attr>
     CreateAttribute(const nsAString& aName, mozilla::ErrorResult& rv);
   already_AddRefed<mozilla::dom::Attr>
     CreateAttributeNS(const nsAString& aNamespaceURI,
                       const nsAString& aQualifiedName,
                       mozilla::ErrorResult& rv);
-  void SetAllowUnsafeHTML(bool aAllow) { mAllowUnsafeHTML = aAllow; }
-  bool AllowUnsafeHTML() const;
   void GetInputEncoding(nsAString& aInputEncoding) const;
   already_AddRefed<mozilla::dom::Location> GetLocation() const;
   void GetReferrer(nsAString& aReferrer) const;
   void GetLastModified(nsAString& aLastModified) const;
   void GetReadyState(nsAString& aReadyState) const;
 
   already_AddRefed<mozilla::dom::AboutCapabilities> GetAboutCapabilities(
     ErrorResult& aRv);
@@ -3987,20 +3985,16 @@ protected:
 
   // True if dom.webcomponents.shadowdom.enabled pref is set when document is
   // created.
   bool mIsShadowDOMEnabled : 1;
 
   // True if this document is for an SVG-in-OpenType font.
   bool mIsSVGGlyphsDocument : 1;
 
-  // True if unsafe HTML fragments should be allowed in chrome-privileged
-  // documents.
-  bool mAllowUnsafeHTML : 1;
-
   // True if the document is being destroyed.
   bool mInDestructor: 1;
 
   // True if the document has been detached from its content viewer.
   bool mIsGoingAway: 1;
 
   bool mInXBLUpdate: 1;
 
--- a/dom/events/DataTransfer.cpp
+++ b/dom/events/DataTransfer.cpp
@@ -893,17 +893,17 @@ DataTransfer::GetTransferable(uint32_t a
   uint32_t totalCustomLength = baseLength;
 
   const char* knownFormats[] = {
     kTextMime, kHTMLMime, kNativeHTMLMime, kRTFMime,
     kURLMime, kURLDataMime, kURLDescriptionMime, kURLPrivateMime,
     kPNGImageMime, kJPEGImageMime, kGIFImageMime, kNativeImageMime,
     kFileMime, kFilePromiseMime, kFilePromiseURLMime,
     kFilePromiseDestFilename, kFilePromiseDirectoryMime,
-    kMozTextInternal, kHTMLContext, kHTMLInfo };
+    kMozTextInternal, kHTMLContext, kHTMLInfo, kImageRequestMime };
 
   /*
    * Two passes are made here to iterate over all of the types. First, look for
    * any types that are not in the list of known types. For this pass,
    * handlingCustomFormats will be true. Data that corresponds to unknown types
    * will be pulled out and inserted into a single type (kCustomTypesMime) by
    * writing the data into a stream.
    *
@@ -1197,26 +1197,27 @@ DataTransfer::MozItemCount() const
 {
   return mItems->MozItemCount();
 }
 
 nsresult
 DataTransfer::SetDataWithPrincipal(const nsAString& aFormat,
                                    nsIVariant* aData,
                                    uint32_t aIndex,
-                                   nsIPrincipal* aPrincipal)
+                                   nsIPrincipal* aPrincipal,
+                                   bool aHidden)
 {
   nsAutoString format;
   GetRealFormat(aFormat, format);
 
   ErrorResult rv;
   RefPtr<DataTransferItem> item =
     mItems->SetDataWithPrincipal(format, aData, aIndex, aPrincipal,
                                  /* aInsertOnly = */ false,
-                                 /* aHidden= */ false,
+                                 aHidden,
                                  rv);
   return rv.StealNSResult();
 }
 
 void
 DataTransfer::SetDataWithPrincipalFromOtherProcess(const nsAString& aFormat,
                                                    nsIVariant* aData,
                                                    uint32_t aIndex,
--- a/dom/events/DataTransfer.h
+++ b/dom/events/DataTransfer.h
@@ -369,17 +369,18 @@ public:
   void ClearAll();
 
   // Similar to SetData except also specifies the principal to store.
   // aData may be null when called from CacheExternalDragFormats or
   // CacheExternalClipboardFormats.
   nsresult SetDataWithPrincipal(const nsAString& aFormat,
                                 nsIVariant* aData,
                                 uint32_t aIndex,
-                                nsIPrincipal* aPrincipal);
+                                nsIPrincipal* aPrincipal,
+                                bool aHidden=false);
 
   // Variation of SetDataWithPrincipal with handles extracting
   // kCustomTypesMime data into separate types.
   void SetDataWithPrincipalFromOtherProcess(const nsAString& aFormat,
                                             nsIVariant* aData,
                                             uint32_t aIndex,
                                             nsIPrincipal* aPrincipal,
                                             bool aHidden);
--- a/dom/media/CubebUtils.cpp
+++ b/dom/media/CubebUtils.cpp
@@ -35,16 +35,18 @@
 #define PREF_VOLUME_SCALE "media.volume_scale"
 #define PREF_CUBEB_BACKEND "media.cubeb.backend"
 #define PREF_CUBEB_LATENCY_PLAYBACK "media.cubeb_latency_playback_ms"
 #define PREF_CUBEB_LATENCY_MSG "media.cubeb_latency_msg_frames"
 // Allows to get something non-default for the preferred sample-rate, to allow
 // troubleshooting in the field and testing.
 #define PREF_CUBEB_FORCE_SAMPLE_RATE "media.cubeb.force_sample_rate"
 #define PREF_CUBEB_LOGGING_LEVEL "media.cubeb.logging_level"
+// Hidden pref used by tests to force failure to obtain cubeb context
+#define PREF_CUBEB_FORCE_NULL_CONTEXT "media.cubeb.force_null_context"
 #define PREF_CUBEB_SANDBOX "media.cubeb.sandbox"
 #define PREF_AUDIOIPC_POOL_SIZE "media.audioipc.pool_size"
 #define PREF_AUDIOIPC_STACK_SIZE "media.audioipc.stack_size"
 
 #if (defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)) || defined(XP_MACOSX)
 #define MOZ_CUBEB_REMOTING
 #endif
 
@@ -122,16 +124,17 @@ uint32_t sCubebPlaybackLatencyInMillisec
 uint32_t sCubebMSGLatencyInFrames = 512;
 // If sCubebForcedSampleRate is zero, PreferredSampleRate will return the
 // preferred sample-rate for the audio backend in use. Otherwise, it will be
 // used as the preferred sample-rate.
 uint32_t sCubebForcedSampleRate = 0;
 bool sCubebPlaybackLatencyPrefSet = false;
 bool sCubebMSGLatencyPrefSet = false;
 bool sAudioStreamInitEverSucceeded = false;
+bool sCubebForceNullContext = false;
 #ifdef MOZ_CUBEB_REMOTING
 bool sCubebSandbox = false;
 size_t sAudioIPCPoolSize;
 size_t sAudioIPCStackSize;
 #endif
 StaticAutoPtr<char> sBrandName;
 StaticAutoPtr<char> sCubebBackendName;
 
@@ -230,16 +233,21 @@ void PrefChanged(const char* aPref, void
     Preferences::GetCString(aPref, value);
     if (value.IsEmpty()) {
       sCubebBackendName = nullptr;
     } else {
       sCubebBackendName = new char[value.Length() + 1];
       PodCopy(sCubebBackendName.get(), value.get(), value.Length());
       sCubebBackendName[value.Length()] = 0;
     }
+  } else if (strcmp(aPref, PREF_CUBEB_FORCE_NULL_CONTEXT) == 0) {
+    StaticMutexAutoLock lock(sMutex);
+    sCubebForceNullContext = Preferences::GetBool(aPref, false);
+    MOZ_LOG(gCubebLog, LogLevel::Verbose,
+            ("%s: %s", PREF_CUBEB_FORCE_NULL_CONTEXT, sCubebForceNullContext ? "true" : "false"));
   }
 #ifdef MOZ_CUBEB_REMOTING
   else if (strcmp(aPref, PREF_CUBEB_SANDBOX) == 0) {
     StaticMutexAutoLock lock(sMutex);
     sCubebSandbox = Preferences::GetBool(aPref);
     MOZ_LOG(gCubebLog, LogLevel::Verbose, ("%s: %s", PREF_CUBEB_SANDBOX, sCubebSandbox ? "true" : "false"));
 
     if (sCubebSandbox && !sServerHandle && XRE_IsParentProcess()) {
@@ -372,16 +380,22 @@ ipc::FileDescriptor CreateAudioIPCConnec
 #else
   return ipc::FileDescriptor();
 #endif
 }
 
 cubeb* GetCubebContextUnlocked()
 {
   sMutex.AssertCurrentThreadOwns();
+  if (sCubebForceNullContext) {
+    // Pref set such that we should return a null context
+    MOZ_LOG(gCubebLog, LogLevel::Debug,
+            ("%s: returning null context due to %s!", __func__, PREF_CUBEB_FORCE_NULL_CONTEXT));
+    return nullptr;
+  }
   if (sCubebState != CubebState::Uninitialized) {
     // If we have already passed the initialization point (below), just return
     // the current context, which may be null (e.g., after error or shutdown.)
     return sCubebContext;
   }
 
   if (!sBrandName && NS_IsMainThread()) {
     InitBrandName();
@@ -502,16 +516,17 @@ uint32_t GetCubebMSGLatencyInFrames(cube
 
 void InitLibrary()
 {
   Preferences::RegisterCallbackAndCall(PrefChanged, PREF_VOLUME_SCALE);
   Preferences::RegisterCallbackAndCall(PrefChanged, PREF_CUBEB_LATENCY_PLAYBACK);
   Preferences::RegisterCallbackAndCall(PrefChanged, PREF_CUBEB_LATENCY_MSG);
   Preferences::RegisterCallback(PrefChanged, PREF_CUBEB_FORCE_SAMPLE_RATE);
   Preferences::RegisterCallbackAndCall(PrefChanged, PREF_CUBEB_BACKEND);
+  Preferences::RegisterCallbackAndCall(PrefChanged, PREF_CUBEB_FORCE_NULL_CONTEXT);
   Preferences::RegisterCallbackAndCall(PrefChanged, PREF_CUBEB_SANDBOX);
   Preferences::RegisterCallbackAndCall(PrefChanged, PREF_AUDIOIPC_POOL_SIZE);
   Preferences::RegisterCallbackAndCall(PrefChanged, PREF_AUDIOIPC_STACK_SIZE);
   if (MOZ_LOG_TEST(gCubebLog, LogLevel::Verbose)) {
     cubeb_set_log_callback(CUBEB_LOG_VERBOSE, CubebLogCallback);
   } else if (MOZ_LOG_TEST(gCubebLog, LogLevel::Error)) {
     cubeb_set_log_callback(CUBEB_LOG_NORMAL, CubebLogCallback);
   }
@@ -537,16 +552,17 @@ void ShutdownLibrary()
   Preferences::UnregisterCallback(PrefChanged, PREF_AUDIOIPC_STACK_SIZE);
   Preferences::UnregisterCallback(PrefChanged, PREF_AUDIOIPC_POOL_SIZE);
   Preferences::UnregisterCallback(PrefChanged, PREF_CUBEB_SANDBOX);
   Preferences::UnregisterCallback(PrefChanged, PREF_CUBEB_BACKEND);
   Preferences::UnregisterCallback(PrefChanged, PREF_CUBEB_LATENCY_PLAYBACK);
   Preferences::UnregisterCallback(PrefChanged, PREF_CUBEB_FORCE_SAMPLE_RATE);
   Preferences::UnregisterCallback(PrefChanged, PREF_CUBEB_LATENCY_MSG);
   Preferences::UnregisterCallback(PrefChanged, PREF_CUBEB_LOGGING_LEVEL);
+  Preferences::UnregisterCallback(PrefChanged, PREF_CUBEB_FORCE_NULL_CONTEXT);
 
   StaticMutexAutoLock lock(sMutex);
   if (sCubebContext) {
     cubeb_destroy(sCubebContext);
     sCubebContext = nullptr;
   }
   sBrandName = nullptr;
   sCubebBackendName = nullptr;
--- a/dom/media/tests/mochitest/mochitest.ini
+++ b/dom/media/tests/mochitest/mochitest.ini
@@ -62,16 +62,18 @@ skip-if = toolkit == 'android' || (webre
 [test_getUserMedia_basicTabshare.html]
 skip-if = toolkit == 'android' # no windowshare on android
 [test_getUserMedia_basicWindowshare.html]
 skip-if = toolkit == 'android' # no windowshare on android
 [test_getUserMedia_basicVideoAudio.html]
 [test_getUserMedia_bug1223696.html]
 [test_getUserMedia_constraints.html]
 [test_getUserMedia_callbacks.html]
+[test_getUserMedia_cubebDisabled.html]
+[test_getUserMedia_cubebDisabledFakeStreams.html]
 [test_getUserMedia_GC_MediaStream.html]
 [test_getUserMedia_getTrackById.html]
 [test_getUserMedia_gumWithinGum.html]
 [test_getUserMedia_loadedmetadata.html]
 [test_getUserMedia_mediaElementCapture_audio.html]
 skip-if = android_version == '18' # android(Bug 1189784, timeouts on 4.3 emulator)
 [test_getUserMedia_mediaElementCapture_tracks.html]
 skip-if = android_version == '18' # android(Bug 1189784, timeouts on 4.3 emulator)
new file mode 100644
--- /dev/null
+++ b/dom/media/tests/mochitest/test_getUserMedia_cubebDisabled.html
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <script type="application/javascript" src="mediaStreamPlayback.js"></script>
+</head>
+<body>
+<pre id="test">
+<script type="application/javascript">
+  createHTML({
+    title: "getUserMedia with Cubeb Disabled Test",
+    bug: "1443525"
+  });
+  /**
+   * Run a test to verify we fail gracefully if we cannot fetch a cubeb context
+   * during a gUM call.
+   */
+  runTest(async function () {
+    info("Get user media with cubeb disabled starting");
+    // Push prefs to ensure no cubeb context and no fake streams.
+    await pushPrefs(["media.cubeb.force_null_context", true],
+                    ["media.navigator.streams.fake", false]);
+
+    // Android has its own codepath which means it works even when cubeb is
+    // disabled. For examples see MediaEngineWebRTC::GetNumOfRecordingDevices and
+    // MediaEngineWebRTC::GetRecordingDeviceName.
+    let isAndroid = navigator.appVersion.includes("Android");
+    // We're on android we expect to get an audio stream, create an elem for it
+    let testAudio = createMediaElement('audio', 'testAudio');
+
+    // Request audio only, to avoid cams
+    let constraints = {audio: true, video: false};
+    let stream;
+    try {
+      stream = await getUserMedia(constraints);
+    } catch (e) {
+      if (isAndroid) {
+        ok(false, `getUserMedia expected to succeed on android, even with null cubeb context, but got ${e}`);
+        return;
+      }
+      // !isAndroid
+      // We've got no audio backend, so we expect gUM to fail.
+      ok(e.name == "NotFoundError", "Expected NotFoundError due to no audio tracks!");
+      return;
+    }
+    if (isAndroid) {
+      ok(stream, "getUserMedia expected to return a stream on Android even when cubeb context null!");
+      let playback = new LocalMediaStreamPlayback(testAudio, stream);
+      return playback.playMedia(false);
+    }
+    // !isAndroid
+    // If we're not on android we should not have gotten a stream without a cubeb context!
+    ok(false, "getUserMedia not expected to succeed when cubeb is disabled, but it did!");
+  });
+
+
+</script>
+</pre>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/dom/media/tests/mochitest/test_getUserMedia_cubebDisabledFakeStreams.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <script type="application/javascript" src="mediaStreamPlayback.js"></script>
+</head>
+<body>
+<pre id="test">
+<script type="application/javascript">
+  createHTML({
+    title: "getUserMedia fake stream with Cubeb Disabled Test",
+    bug: "1443525"
+  });
+  /**
+   * Run a test to verify we can still return a fake stream even if we cannot
+   * get a cubeb context. See also Bug 1434477
+   */
+  runTest(async function () {
+    info("Get user media with cubeb disabled and fake tracks starting");
+    // Push prefs to ensure no cubeb context and fake streams
+    await pushPrefs(["media.cubeb.force_null_context", true],
+                    ["media.navigator.streams.fake", true],
+                    ['media.audio_loopback_dev', '']);
+    let testAudio = createMediaElement('audio', 'testAudio');
+    // Request audio only, to avoid cams
+    let constraints = {audio: true, video: false};
+    let stream;
+    try {
+      stream = await getUserMedia(constraints);
+    } catch (e) {
+      // We've got no audio backend, so we expect gUM to fail
+      ok(false, `Did not expect to fail, but got ${e}`);
+      return;
+    }
+    ok(stream, "getUserMedia should get a stream!");
+    let playback = new LocalMediaStreamPlayback(testAudio, stream);
+    return playback.playMedia(false);
+  });
+
+
+</script>
+</pre>
+</body>
+</html>
--- a/dom/tests/mochitest/webcomponents/test_xul_custom_element.xul
+++ b/dom/tests/mochitest/webcomponents/test_xul_custom_element.xul
@@ -21,16 +21,19 @@
 
       connectedCallback() {
         this.textContent = "foo";
       }
     }
 
     customElements.define("test-custom-element", TestCustomElement);
 
+    class TestWithoutDash extends XULElement { }
+    customElements.define("testwithoutdash", TestWithoutDash);
+
     function runTest() {
       const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
 
       let element = document.createElementNS(XUL_NS, "test-custom-element");
       document.querySelector("#content").appendChild(element);
       is(element.textContent, "foo", "Should have set the textContent");
       ok(element instanceof TestCustomElement, "Should be an instance of TestCustomElement");
 
@@ -48,21 +51,25 @@
       is(element3.textContent, "foo", "Should have set the textContent");
       ok(element3 instanceof TestCustomElement, "Should be an instance of TestCustomElement");
 
       let element4 = document.getElementById("element4");
       is(element4.textContent, "foo",
          "Parser should have instantiated the custom element.");
       ok(element4 instanceof TestCustomElement, "Should be an instance of TestCustomElement");
 
+      let element5 = document.getElementById("element5");
+      ok(element5 instanceof TestWithoutDash, "Should be an instance of TestWithoutDash");
+
       SimpleTest.finish();
     }
   ]]>
   </script>
 
   <body xmlns="http://www.w3.org/1999/xhtml">
     <p id="display"></p>
     <div id="content" style="display: none">
       <test-custom-element id="element4" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"/>
+      <testwithoutdash id="element5" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"/>
     </div>
     <pre id="test"></pre>
   </body>
 </window>
--- a/dom/webidl/Document.webidl
+++ b/dom/webidl/Document.webidl
@@ -101,21 +101,16 @@ interface Document : Node {
   // These are not in the spec, but leave them for now for backwards compat.
   // So sort of like Gecko extensions
   [NewObject, Throws]
   CDATASection createCDATASection(DOMString data);
   [NewObject, Throws]
   Attr createAttribute(DOMString name);
   [NewObject, Throws]
   Attr createAttributeNS(DOMString? namespace, DOMString name);
-
-  // Allows setting innerHTML without automatic sanitization.
-  // Do not use this.
-  [ChromeOnly]
-  attribute boolean allowUnsafeHTML;
 };
 
 // https://html.spec.whatwg.org/multipage/dom.html#the-document-object
 partial interface Document {
   [PutForwards=href, Unforgeable] readonly attribute Location? location;
   //(HTML only)         attribute DOMString domain;
   readonly attribute DOMString referrer;
   //(HTML only)         attribute DOMString cookie;
--- a/gfx/layers/apz/src/APZCTreeManager.cpp
+++ b/gfx/layers/apz/src/APZCTreeManager.cpp
@@ -3186,28 +3186,25 @@ APZCTreeManager::ComputeTransformForScro
   // and then unapplying it after unapplying the async transform.
   if (aScrollbarIsDescendant) {
     AsyncTransformComponentMatrix overscroll =
         aApzc->GetOverscrollTransform(AsyncPanZoomController::eForCompositing);
     Matrix4x4 asyncUntransform = (asyncTransform * overscroll).Inverse().ToUnknownMatrix();
     const Matrix4x4& contentTransform = aScrollableContentTransform;
     Matrix4x4 contentUntransform = contentTransform.Inverse();
 
-    AsyncTransformComponentMatrix asyncCompensation =
-        ViewAs<AsyncTransformComponentMatrix>(
-            contentTransform
-          * asyncUntransform
-          * contentUntransform);
-
-    compensation = compensation * asyncCompensation;
-
-    // Pass the async compensation out to the caller so that it can use it
+    compensation *= ViewAs<AsyncTransformComponentMatrix>(
+                        contentTransform
+                      * asyncUntransform
+                      * contentUntransform);
+
+    // Pass the total compensation out to the caller so that it can use it
     // to transform clip transforms as needed.
     if (aOutClipTransform) {
-      *aOutClipTransform = asyncCompensation;
+      *aOutClipTransform = compensation;
     }
   }
   transform = transform * compensation;
 
   return transform;
 }
 
 APZSampler*
--- a/gfx/layers/apz/test/reftest/reftest.list
+++ b/gfx/layers/apz/test/reftest/reftest.list
@@ -8,12 +8,17 @@ fuzzy-if(Android,4,5) skip-if(!Android) 
 fuzzy-if(Android,3,7) skip-if(!Android) pref(apz.allow_zooming,true) == async-scrollbar-1-vh-rtl.html async-scrollbar-1-vh-rtl-ref.html
 
 # Different async zoom levels. Since the scrollthumb gets async-scaled in the
 # compositor, the border-radius ends of the scrollthumb are going to be a little
 # off, hence the fuzzy-if clauses.
 fuzzy-if(Android,54,20) skip-if(!Android) pref(apz.allow_zooming,true) == async-scrollbar-zoom-1.html async-scrollbar-zoom-1-ref.html
 fuzzy-if(Android,45,22) skip-if(!Android) pref(apz.allow_zooming,true) == async-scrollbar-zoom-2.html async-scrollbar-zoom-2-ref.html
 
+# Test scrollbars working properly with pinch-zooming, i.e. different document resolutions.
+# As above, the end of the scrollthumb won't match perfectly, but the bulk of the scrollbar should be present and identical.
+fuzzy-if(Android,54,14) skip-if(!Android) pref(apz.allow_zooming,true) == scrollbar-zoom-resolution-1.html scrollbar-zoom-resolution-1-ref.html
+fuzzy-if(Android,51,22) skip-if(!Android) pref(apz.allow_zooming,true) == scrollbar-zoom-resolution-2.html scrollbar-zoom-resolution-2-ref.html
+
 # Meta-viewport tag support
 skip-if(!Android) pref(apz.allow_zooming,true) == initial-scale-1.html initial-scale-1-ref.html
 
 skip-if(!asyncPan) == frame-reconstruction-scroll-clamping.html frame-reconstruction-scroll-clamping-ref.html
new file mode 100644
--- /dev/null
+++ b/gfx/layers/apz/test/reftest/scrollbar-zoom-resolution-1-ref.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html class="reftest-wait"><head>
+<meta name="viewport" content="width=device-width">
+</head>
+<body onload="scrollTo(450,10000); document.documentElement.classList.remove('reftest-wait')">
+<div style="width: 9000px; height: 20000px; background: white;"></div>
+</body>
+</html>
+
new file mode 100644
--- /dev/null
+++ b/gfx/layers/apz/test/reftest/scrollbar-zoom-resolution-1.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html class="reftest-wait"><head>
+<meta name="viewport" content="initial-scale=2.0; width=device-width">
+</head>
+<body onload="scrollTo(225,5000); document.documentElement.classList.remove('reftest-wait')">
+<div style="width: 4500px; height: 10000px; background: white;"></div>
+</body>
+</html>
+
new file mode 100644
--- /dev/null
+++ b/gfx/layers/apz/test/reftest/scrollbar-zoom-resolution-2-ref.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html class="reftest-wait"><head>
+<meta name="viewport" content="width=device-width">
+</head>
+<body onload="scrollTo(450,10000); document.documentElement.classList.remove('reftest-wait')">
+<div style="width: 9000px; height: 20000px; background: white;"></div>
+</body>
+</html>
+
new file mode 100644
--- /dev/null
+++ b/gfx/layers/apz/test/reftest/scrollbar-zoom-resolution-2.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html class="reftest-wait"><head>
+<meta name="viewport" content="initial-scale=0.5; width=device-width">
+</head>
+<body onload="scrollTo(900,20000); document.documentElement.classList.remove('reftest-wait')">
+<div style="width: 18000px; height: 40000px; background: white;"></div>
+</body>
+</html>
+
--- a/js/public/HeapAPI.h
+++ b/js/public/HeapAPI.h
@@ -478,19 +478,16 @@ GetStringZone(JSString* str)
     if (!js::gc::IsInsideNursery(reinterpret_cast<js::gc::Cell*>(str)))
         return js::gc::detail::GetGCThingZone(reinterpret_cast<uintptr_t>(str));
     return GetNurseryStringZone(str);
 }
 
 extern JS_PUBLIC_API(Zone*)
 GetObjectZone(JSObject* obj);
 
-extern JS_PUBLIC_API(Zone*)
-GetValueZone(const Value& value);
-
 static MOZ_ALWAYS_INLINE bool
 GCThingIsMarkedGray(GCCellPtr thing)
 {
     if (thing.mayBeOwnedByOtherRuntime())
         return false;
     return js::gc::detail::CellIsMarkedGrayIfKnown(thing.asCell());
 }
 
--- a/layout/style/test/gtest/StyloParsingBench.cpp
+++ b/layout/style/test/gtest/StyloParsingBench.cpp
@@ -40,23 +40,16 @@ static void ServoParsingBench() {
                                      data,
                                      0,
                                      eCompatibility_FullStandards,
                                      nullptr)
         .Consume();
   }
 }
 
-MOZ_GTEST_BENCH(Stylo, Servo_StyleSheet_FromUTF8Bytes_Bench, ServoParsingBench);
-
-
-
-
-
-
 static void ServoSetPropertyByIdBench(const nsACString& css) {
   RefPtr<RawServoDeclarationBlock> block = Servo_DeclarationBlock_CreateEmpty().Consume();
   RefPtr<URLExtraData> data = new URLExtraData(
     NullPrincipalURI::Create(), nullptr, NullPrincipal::CreateWithoutOriginAttributes());
 
   ASSERT_TRUE(IsUTF8(css));
 
   for (int i = 0; i < SETPROPERTY_REPETITIONS; i++) {
@@ -68,24 +61,16 @@ static void ServoSetPropertyByIdBench(co
       data,
       ParsingMode::Default,
       eCompatibility_FullStandards,
       nullptr
     );
   }
 }
 
-MOZ_GTEST_BENCH(Stylo, Servo_DeclarationBlock_SetPropertyById_Bench, [] {
-  ServoSetPropertyByIdBench(NS_LITERAL_CSTRING("10px"));
-});
-
-MOZ_GTEST_BENCH(Stylo, Servo_DeclarationBlock_SetPropertyById_WithInitialSpace_Bench, [] {
-  ServoSetPropertyByIdBench(NS_LITERAL_CSTRING(" 10px"));
-});
-
 static void ServoGetPropertyValueById() {
   RefPtr<RawServoDeclarationBlock> block = Servo_DeclarationBlock_CreateEmpty().Consume();
   RefPtr<URLExtraData> data = new URLExtraData(
     NullPrincipalURI::Create(), nullptr, NullPrincipal::CreateWithoutOriginAttributes());
   NS_NAMED_LITERAL_CSTRING(css_, "10px");
   const nsACString& css = css_;
   Servo_DeclarationBlock_SetPropertyById(
     block,
@@ -105,11 +90,22 @@ static void ServoGetPropertyValueById() 
       block,
       eCSSProperty_width,
       &value
     );
     ASSERT_TRUE(value.EqualsLiteral("10px"));
   }
 }
 
-MOZ_GTEST_BENCH(Stylo, Servo_DeclarationBlock_GetPropertyById_Bench, ServoGetPropertyValueById);
+// Bug 1436018 - Disable Stylo microbenchmark on Windows
+#if !defined(_WIN32) && !defined(_WIN64)
+MOZ_GTEST_BENCH(Stylo, Servo_StyleSheet_FromUTF8Bytes_Bench, ServoParsingBench);
 
+MOZ_GTEST_BENCH(Stylo, Servo_DeclarationBlock_SetPropertyById_Bench, [] {
+  ServoSetPropertyByIdBench(NS_LITERAL_CSTRING("10px"));
+});
 
+MOZ_GTEST_BENCH(Stylo, Servo_DeclarationBlock_SetPropertyById_WithInitialSpace_Bench, [] {
+  ServoSetPropertyByIdBench(NS_LITERAL_CSTRING(" 10px"));
+});
+
+MOZ_GTEST_BENCH(Stylo, Servo_DeclarationBlock_GetPropertyById_Bench, ServoGetPropertyValueById);
+#endif
--- a/mfbt/Span.h
+++ b/mfbt/Span.h
@@ -407,17 +407,18 @@ private:
  *
  * In addition to having constructors and MakeSpan() functions that take
  * various well-known types, a Span for an arbitrary type can be constructed
  * (via constructor or MakeSpan()) from a pointer and a length or a pointer
  * and another pointer pointing just past the last element.
  *
  * A Span<const char> or Span<const char16_t> can be obtained for const char*
  * or const char16_t pointing to a zero-terminated string using the
- * MakeStringSpan() function. Corresponding implicit constructor does not exist
+ * MakeStringSpan() function (which treats a nullptr argument equivalently
+ * to the empty string). Corresponding implicit constructor does not exist
  * in order to avoid accidental construction in cases where const char* or
  * const char16_t* do not point to a zero-terminated string.
  *
  * Span has methods that follow the Mozilla naming style and methods that
  * don't. The methods that follow the Mozilla naming style are meant to be
  * used directly from Mozilla code. The methods that don't are meant for
  * integration with C++11 range-based loops and with meta-programming that
  * expects the same methods that are found on the standard-library
@@ -1056,30 +1057,38 @@ MakeSpan(const Container& cont)
 template<class Ptr>
 Span<typename Ptr::element_type>
 MakeSpan(Ptr& aPtr, size_t aLength)
 {
   return Span<typename Ptr::element_type>(aPtr, aLength);
 }
 
 /**
- * Create span from C string.
+ * Create span from a zero-terminated C string. nullptr is
+ * treated as the empty string.
  */
 inline Span<const char>
 MakeStringSpan(const char* aZeroTerminated)
 {
+  if (!aZeroTerminated) {
+    return Span<const char>();
+  }
   return Span<const char>(aZeroTerminated, std::strlen(aZeroTerminated));
 }
 
 /**
- * Create span from UTF-16 C string.
+ * Create span from a zero-terminated UTF-16 C string. nullptr is
+ * treated as the empty string.
  */
 inline Span<const char16_t>
 MakeStringSpan(const char16_t* aZeroTerminated)
 {
+  if (!aZeroTerminated) {
+    return Span<const char16_t>();
+  }
   return Span<const char16_t>(aZeroTerminated, span_details::strlen16(aZeroTerminated));
 }
 
 } // namespace mozilla
 
 #ifdef _MSC_VER
 #if _MSC_VER < 1910
 #undef constexpr
--- a/mfbt/tests/gtest/TestSpan.cpp
+++ b/mfbt/tests/gtest/TestSpan.cpp
@@ -1190,16 +1190,21 @@ SPAN_TEST(from_xpcom_collections)
     ASSERT_EQ(s.data(), v.Elements());
     ASSERT_EQ(s[2], 3);
   }
 }
 
 SPAN_TEST(from_cstring)
 {
   {
+    const char* str = nullptr;
+    auto cs = MakeStringSpan(str);
+    ASSERT_EQ(cs.size(), 0U);
+  }
+  {
     const char* str = "abc";
 
     auto cs = MakeStringSpan(str);
     ASSERT_EQ(cs.size(), 3U);
     ASSERT_EQ(cs.data(), str);
     ASSERT_EQ(cs[2], 'c');
 
 #ifdef CONFIRM_COMPILATION_ERRORS
@@ -1229,16 +1234,21 @@ SPAN_TEST(from_cstring)
     Span<char> scca(arr); // error
     Span<const char> sccca(arr); // error
 
     Span<const char> scccea;
     scccea = arr; // error
 #endif
   }
   {
+    const char16_t* str = nullptr;
+    auto cs = MakeStringSpan(str);
+    ASSERT_EQ(cs.size(), 0U);
+  }
+  {
     char16_t arr[4] = {'a', 'b', 'c', 0};
     const char16_t* str = arr;
 
     auto cs = MakeStringSpan(str);
     ASSERT_EQ(cs.size(), 3U);
     ASSERT_EQ(cs.data(), str);
     ASSERT_EQ(cs[2], 'c');
 
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -628,27 +628,42 @@ public class BrowserApp extends GeckoApp
                     tab.doBack();
                     return true;
 
                 case KeyEvent.KEYCODE_RIGHT_BRACKET:
                     tab.doForward();
                     return true;
 
                 case KeyEvent.KEYCODE_R:
-                    tab.doReload(event.isShiftPressed() ? true : false);
+                    tab.doReload(event.isShiftPressed());
                     return true;
 
                 case KeyEvent.KEYCODE_PERIOD:
                     tab.doStop();
                     return true;
 
                 case KeyEvent.KEYCODE_T:
-                    addTab();
+                    int flags = Tabs.LOADURL_START_EDITING;
+                    if (tab.isPrivate()) {
+                        flags |= Tabs.LOADURL_PRIVATE;
+                    }
+                    addTab(flags);
                     return true;
 
+                case KeyEvent.KEYCODE_N:
+                    addTab(Tabs.LOADURL_START_EDITING);
+                    return true;
+
+                case KeyEvent.KEYCODE_P:
+                    if (event.isShiftPressed()) {
+                        addTab(Tabs.LOADURL_PRIVATE | Tabs.LOADURL_START_EDITING);
+                        return true;
+                    }
+                    break;
+
                 case KeyEvent.KEYCODE_W:
                     Tabs.getInstance().closeTab(tab);
                     return true;
 
                 case KeyEvent.KEYCODE_F:
                     mFindInPageBar.show(mBrowserToolbar.isPrivateMode());
                 return true;
             }
@@ -2318,19 +2333,26 @@ public class BrowserApp extends GeckoApp
             return false;
         }
 
         final String packageName = info.activityInfo.packageName;
         return (TextUtils.equals(packageName, getPackageName()));
     }
 
     @Override
+    public void addTab(final int flags) {
+        if ((flags & Tabs.LOADURL_PRIVATE) == 0) {
+            MmaDelegate.track(NEW_TAB);
+        }
+        Tabs.getInstance().addTab(flags);
+    }
+
+    @Override
     public void addTab() {
-        MmaDelegate.track(NEW_TAB);
-        Tabs.getInstance().addTab();
+        addTab(Tabs.LOADURL_NONE);
     }
 
     @Override
     public void addPrivateTab() {
         Tabs.getInstance().addPrivateTab();
     }
 
     public void showTrackingProtectionPromptIfApplicable() {
--- a/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
@@ -629,16 +629,18 @@ public abstract class GeckoApp extends G
                 } catch (final InterruptedException e) { }
             }
             outState.putString(SAVED_STATE_PRIVATE_SESSION, mPrivateBrowsingSession);
         }
 
         outState.putBoolean(SAVED_STATE_IN_BACKGROUND, isApplicationInBackground());
     }
 
+    public void addTab(int flags) { }
+
     public void addTab() { }
 
     public void addPrivateTab() { }
 
     public void showNormalTabs() { }
 
     public void showPrivateTabs() { }
 
deleted file mode 100644
--- a/mobile/android/branding/nightly-old-id/configure.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-# 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/.
-
-MOZ_APP_DISPLAYNAME=Nightly
-ANDROID_PACKAGE_NAME=org.mozilla.fennec
-MOZ_UPDATER=1
-MOZ_ANDROID_ANR_REPORTER=1
-MOZ_ANDROID_SHARED_ID=org.mozilla.fennec.sharedID
-MOZ_ANDROID_GCM_SENDERID=965234145045
-MOZ_MMA_GCM_SENDERID=242693410970
deleted file mode 100644
index 2ca32a355fcdd8161f0f7bd6b910da36301e192e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 23830c03fcd5775202e61c6b98ffd3e98a433a37..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d2214dcefe9a4f0aa95179bafca8b727ee686301..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/mobile/android/branding/nightly-old-id/content/jar.mn
+++ /dev/null
@@ -1,9 +0,0 @@
-# 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/.
-
-chrome.jar:
-% content branding %content/branding/ contentaccessible=yes
-  content/branding/about.png                     (about.png)
-  content/branding/favicon32.png                 (favicon32.png)
-  content/branding/favicon64.png                 (favicon64.png)
deleted file mode 100644
--- a/mobile/android/branding/nightly-old-id/content/moz.build
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# 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/.
-
-JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
deleted file mode 100644
--- a/mobile/android/branding/nightly-old-id/locales/en-US/brand.dtd
+++ /dev/null
@@ -1,9 +0,0 @@
-<!-- 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/. -->
-
-<!ENTITY  brandShortName  "Nightly">
-<!ENTITY  brandFullName   "Mozilla Nightly">
-<!ENTITY  vendorShortName "Mozilla">
-
-<!ENTITY  brandPocket     "Pocket">
deleted file mode 100644
--- a/mobile/android/branding/nightly-old-id/locales/en-US/brand.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-# 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/.
-
-brandShortName=Nightly
-brandFullName=Mozilla Nightly
deleted file mode 100644
--- a/mobile/android/branding/nightly-old-id/locales/jar.mn
+++ /dev/null
@@ -1,11 +0,0 @@
-#filter substitution
-# 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/.
-
-
-@AB_CD@.jar:
-% locale branding @AB_CD@ %locale/branding/
-# Nightly branding only exists in en-US
-  locale/branding/brand.dtd        (en-US/brand.dtd)
-  locale/branding/brand.properties (en-US/brand.properties)
deleted file mode 100644
--- a/mobile/android/branding/nightly-old-id/locales/moz.build
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# 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/.
-
-JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
deleted file mode 100644
--- a/mobile/android/branding/nightly-old-id/moz.build
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# 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/.
-
-DIRS += ['content', 'locales']
deleted file mode 100644
index 68e024ad268a55660e551cd4a6c5e67be2bf1d74..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 2ffc0ca909b93e2446d3cbc7dda51eb524af1197..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 5c9093331cff70e3f3873af4d5937a2945fc2817..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 0b5e1a175255ab488e045c6326e10d62a9b71c9b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 12f87594365ce578c0b761f966bb600660ef6200..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 1ee12f2419eb598a36570c2f6ff76d7df0faff69..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 37ac9d067e92ee79fe97d221796d0942a0bdfaf2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 9128552b390e2d9f3800d16c810effa06faf5c21..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/mobile/android/config/mozconfigs/android-api-16/nightly-old-id
+++ /dev/null
@@ -1,21 +0,0 @@
-. "$topsrcdir/mobile/android/config/mozconfigs/common"
-
-
-
-# Android
-# Warning: Before increasing the with-android-min-sdk value, please note several places in and out
-# of tree have to be changed. Otherwise, places like Treeherder or archive.mozilla.org will
-# advertise a bad API level. This may confuse people. As an example, please look at bug 1384482.
-# If you think you can't handle the whole set of changes, please reach out to the Release
-# Engineering team.
-ac_add_options --with-android-min-sdk=16
-ac_add_options --target=arm-linux-androideabi
-
-ac_add_options --with-branding=mobile/android/branding/nightly-old-id
-
-export MOZILLA_OFFICIAL=1
-export MOZ_TELEMETRY_REPORTING=1
-export MOZ_ANDROID_MMA=1
-export MOZ_ANDROID_POCKET=1
-
-. "$topsrcdir/mobile/android/config/mozconfigs/common.override"
deleted file mode 100644
--- a/mobile/android/config/mozconfigs/android-x86/nightly-old-id
+++ /dev/null
@@ -1,19 +0,0 @@
-. "$topsrcdir/mobile/android/config/mozconfigs/common"
-
-# Warning: Before increasing the with-android-min-sdk value, please note several places in and out
-# of tree have to be changed. Otherwise, places like Treeherder or archive.mozilla.org will
-# advertise a bad API level. This may confuse people. As an example, please look at bug 1384482.
-# If you think you can't handle the whole set of changes, please reach out to the Release
-# Engineering team.
-ac_add_options --target=i386-linux-android
-ac_add_options --with-android-min-sdk=16
-
-
-
-ac_add_options --with-branding=mobile/android/branding/nightly-old-id
-
-export MOZILLA_OFFICIAL=1
-export MOZ_TELEMETRY_REPORTING=1
-export MOZ_ANDROID_POCKET=1
-
-. "$topsrcdir/mobile/android/config/mozconfigs/common.override"
--- a/netwerk/base/nsIOService.cpp
+++ b/netwerk/base/nsIOService.cpp
@@ -34,17 +34,16 @@
 #include "nsIScriptError.h"
 #include "nsIScriptSecurityManager.h"
 #include "nsIProtocolProxyCallback.h"
 #include "nsICancelable.h"
 #include "nsINetworkLinkService.h"
 #include "nsPISocketTransportService.h"
 #include "nsAsyncRedirectVerifyHelper.h"
 #include "nsURLHelper.h"
-#include "nsPIDNSService.h"
 #include "nsIProtocolProxyService2.h"
 #include "MainThreadUtils.h"
 #include "nsINode.h"
 #include "nsIWidget.h"
 #include "nsThreadUtils.h"
 #include "mozilla/LoadInfo.h"
 #include "mozilla/net/NeckoCommon.h"
 #include "mozilla/Services.h"
@@ -199,28 +198,16 @@ nsIOService::nsIOService()
     , mLastNetworkLinkChange(PR_IntervalNow())
     , mNetTearingDownStarted(0)
 {
 }
 
 nsresult
 nsIOService::Init()
 {
-    nsresult rv;
-
-    // We need to get references to the DNS service so that we can shut it
-    // down later. If we wait until the nsIOService is being shut down,
-    // GetService will fail at that point.
-
-    mDNSService = do_GetService(NS_DNSSERVICE_CONTRACTID, &rv);
-    if (NS_FAILED(rv)) {
-        NS_WARNING("failed to get DNS service");
-        return rv;
-    }
-
     // XXX hack until xpidl supports error info directly (bug 13423)
     nsCOMPtr<nsIErrorService> errorService = do_GetService(NS_ERRORSERVICE_CONTRACTID);
     if (errorService) {
         errorService->RegisterErrorStringBundle(NS_ERROR_MODULE_NETWORK, NECKO_MSGS_URL);
     }
     else
         NS_WARNING("failed to get error service");
 
@@ -1141,20 +1128,16 @@ nsIOService::SetOffline(bool offline)
             mLastOfflineStateChange = PR_IntervalNow();
             if (observerService)
                 observerService->NotifyObservers(subject,
                                                  NS_IOSERVICE_OFFLINE_STATUS_TOPIC,
                                                  u"" NS_IOSERVICE_OFFLINE);
         }
         else if (!offline && mOffline) {
             // go online
-            if (mDNSService) {
-                DebugOnly<nsresult> rv = mDNSService->Init();
-                NS_ASSERTION(NS_SUCCEEDED(rv), "DNS service init failed");
-            }
             InitializeSocketTransportService();
             mOffline = false;    // indicate success only AFTER we've
                                     // brought up the services
 
             mLastOfflineStateChange = PR_IntervalNow();
             // don't care if notification fails
             // Only send the ONLINE notification if there is connectivity
             if (observerService && mConnectivity) {
@@ -1162,22 +1145,16 @@ nsIOService::SetOffline(bool offline)
                                                  NS_IOSERVICE_OFFLINE_STATUS_TOPIC,
                                                  (u"" NS_IOSERVICE_ONLINE));
             }
         }
     }
 
     // Don't notify here, as the above notifications (if used) suffice.
     if ((mShutdown || mOfflineForProfileChange) && mOffline) {
-        // be sure to try and shutdown both (even if the first fails)...
-        // shutdown dns service first, because it has callbacks for socket transport
-        if (mDNSService) {
-            DebugOnly<nsresult> rv = mDNSService->Shutdown();
-            NS_ASSERTION(NS_SUCCEEDED(rv), "DNS service shutdown failed");
-        }
         if (mSocketTransportService) {
             DebugOnly<nsresult> rv = mSocketTransportService->Shutdown(mShutdown);
             NS_ASSERTION(NS_SUCCEEDED(rv), "socket transport service shutdown failed");
         }
     }
 
     mSettingOffline = false;
 
--- a/netwerk/base/nsIOService.h
+++ b/netwerk/base/nsIOService.h
@@ -33,17 +33,16 @@
 
 static const char gScheme[][sizeof("moz-safe-about")] =
     {"chrome", "file", "http", "https", "jar", "data", "about", "moz-safe-about", "resource"};
 
 class nsINetworkLinkService;
 class nsIPrefBranch;
 class nsIProtocolProxyService2;
 class nsIProxyInfo;
-class nsPIDNSService;
 class nsPISocketTransportService;
 
 namespace mozilla {
 namespace net {
 class NeckoChild;
 class nsAsyncRedirectVerifyHelper;
 
 class nsIOService final : public nsIIOService
@@ -176,17 +175,16 @@ private:
     // SetOffline() for more details.
     bool                                 mSettingOffline;
     bool                                 mSetOfflineValue;
 
     mozilla::Atomic<bool, mozilla::Relaxed> mShutdown;
     mozilla::Atomic<bool, mozilla::Relaxed> mHttpHandlerAlreadyShutingDown;
 
     nsCOMPtr<nsPISocketTransportService> mSocketTransportService;
-    nsCOMPtr<nsPIDNSService>             mDNSService;
     nsCOMPtr<nsICaptivePortalService>    mCaptivePortalService;
     nsCOMPtr<nsINetworkLinkService>      mNetworkLinkService;
     bool                                 mNetworkLinkServiceInitialized;
 
     // Cached protocol handlers, only accessed on the main thread
     nsWeakPtr                            mWeakHandler[NS_N(gScheme)];
 
     // cached categories
--- a/netwerk/dns/nsDNSService2.cpp
+++ b/netwerk/dns/nsDNSService2.cpp
@@ -21,17 +21,16 @@
 #include "nsDNSPrefetch.h"
 #include "nsThreadUtils.h"
 #include "nsIProtocolProxyService.h"
 #include "prsystem.h"
 #include "prnetdb.h"
 #include "prmon.h"
 #include "prio.h"
 #include "plstr.h"
-#include "nsIOService.h"
 #include "nsCharSeparatedTokenizer.h"
 #include "nsNetAddr.h"
 #include "nsProxyRelease.h"
 #include "nsIObserverService.h"
 #include "nsINetworkLinkService.h"
 #include "TRRService.h"
 
 #include "mozilla/Attributes.h"
@@ -51,16 +50,17 @@ static const char kPrefDnsCacheGrace[]  
 static const char kPrefIPv4OnlyDomains[]     = "network.dns.ipv4OnlyDomains";
 static const char kPrefDisableIPv6[]         = "network.dns.disableIPv6";
 static const char kPrefDisablePrefetch[]     = "network.dns.disablePrefetch";
 static const char kPrefBlockDotOnion[]       = "network.dns.blockDotOnion";
 static const char kPrefDnsLocalDomains[]     = "network.dns.localDomains";
 static const char kPrefDnsForceResolve[]     = "network.dns.forceResolve";
 static const char kPrefDnsOfflineLocalhost[] = "network.dns.offline-localhost";
 static const char kPrefDnsNotifyResolution[] = "network.dns.notifyResolution";
+static const char kPrefNetworkProxyType[]    = "network.proxy.type";
 
 //-----------------------------------------------------------------------------
 
 class nsDNSRecord : public nsIDNSRecord
 {
 public:
     NS_DECL_THREADSAFE_ISUPPORTS
     NS_DECL_NSIDNSRECORD
@@ -490,17 +490,16 @@ private:
 };
 
 //-----------------------------------------------------------------------------
 
 nsDNSService::nsDNSService()
     : mLock("nsDNSServer.mLock")
     , mDisableIPv6(false)
     , mDisablePrefetch(false)
-    , mFirstTime(true)
     , mNotifyResolution(false)
     , mOfflineLocalhost(false)
     , mForceResolveOn(false)
     , mTrrService(nullptr)
 {
 }
 
 nsDNSService::~nsDNSService() = default;
@@ -536,134 +535,170 @@ nsDNSService::GetSingleton()
         } else {
             gDNSService = nullptr;
         }
     }
 
     return do_AddRef(gDNSService);
 }
 
+nsresult
+nsDNSService::ReadPrefs(const char *name)
+{
+    bool tmpbool;
+    uint32_t tmpint;
+    mResolverPrefsUpdated = false;
+
+    // resolver-specific prefs first
+    if(!name || !strcmp(name, kPrefDnsCacheEntries)) {
+        if (NS_SUCCEEDED(Preferences::GetUint(kPrefDnsCacheEntries, &tmpint))) {
+            if (!name || (tmpint != mResCacheEntries)) {
+                mResCacheEntries = tmpint;
+                mResolverPrefsUpdated = true;
+            }
+        }
+
+    }
+    if(!name || !strcmp(name, kPrefDnsCacheExpiration)) {
+        if (NS_SUCCEEDED(Preferences::GetUint(kPrefDnsCacheExpiration, &tmpint))) {
+            if (!name || (tmpint != mResCacheExpiration)) {
+                mResCacheExpiration = tmpint;
+                mResolverPrefsUpdated = true;
+            }
+        }
+
+    }
+    if(!name || !strcmp(name, kPrefDnsCacheGrace)) {
+        if (NS_SUCCEEDED(Preferences::GetUint(kPrefDnsCacheGrace, &tmpint))) {
+            if (!name || (tmpint != mResCacheGrace)) {
+                mResCacheGrace = tmpint;
+                mResolverPrefsUpdated = true;
+            }
+        }
+    }
+
+    // DNSservice prefs
+    if (!name || !strcmp(name, kPrefDisableIPv6)) {
+        if (NS_SUCCEEDED(Preferences::GetBool(kPrefDisableIPv6, &tmpbool))) {
+            mDisableIPv6 = tmpbool;
+        }
+    }
+    if (!name || !strcmp(name, kPrefDnsOfflineLocalhost)) {
+        if (NS_SUCCEEDED(Preferences::GetBool(kPrefDnsOfflineLocalhost, &tmpbool))) {
+            mOfflineLocalhost = tmpbool;
+        }
+    }
+    if (!name || !strcmp(name, kPrefDisablePrefetch)) {
+        if (NS_SUCCEEDED(Preferences::GetBool(kPrefDisablePrefetch, &tmpbool))) {
+            mDisablePrefetch = tmpbool;
+        }
+    }
+    if (!name || !strcmp(name, kPrefBlockDotOnion)) {
+        if (NS_SUCCEEDED(Preferences::GetBool(kPrefBlockDotOnion, &tmpbool))) {
+            mBlockDotOnion = tmpbool;
+        }
+    }
+    if (!name || !strcmp(name, kPrefDnsNotifyResolution)) {
+        if (NS_SUCCEEDED(Preferences::GetBool(kPrefDnsNotifyResolution, &tmpbool))) {
+            mNotifyResolution = tmpbool;
+        }
+    }
+    if (!name || !strcmp(name, kPrefNetworkProxyType)) {
+        if (NS_SUCCEEDED(Preferences::GetUint(kPrefNetworkProxyType, &tmpint))) {
+            mProxyType = tmpint;
+        }
+    }
+    if (!name || !strcmp(name, kPrefIPv4OnlyDomains)) {
+        Preferences::GetCString(kPrefIPv4OnlyDomains, mIPv4OnlyDomains);
+    }
+    if (!name || !strcmp(name, kPrefDnsLocalDomains)) {
+        nsCString localDomains;
+        Preferences::GetCString(kPrefDnsLocalDomains, localDomains);
+        mLocalDomains.Clear();
+        if (!localDomains.IsEmpty()) {
+            nsCCharSeparatedTokenizer tokenizer(localDomains, ',',
+                                                nsCCharSeparatedTokenizer::SEPARATOR_OPTIONAL);
+            while (tokenizer.hasMoreTokens()) {
+                mLocalDomains.PutEntry(tokenizer.nextToken());
+            }
+        }
+    }
+    if (!name || !strcmp(name, kPrefDnsForceResolve)) {
+        Preferences::GetCString(kPrefDnsForceResolve, mForceResolve);
+        mForceResolveOn = !mForceResolve.IsEmpty();
+    }
+
+    if (mProxyType == nsIProtocolProxyService::PROXYCONFIG_MANUAL) {
+        // Disable prefetching either by explicit preference or if a
+        // manual proxy is configured
+        mDisablePrefetch = true;
+    }
+    return NS_OK;
+}
+
 NS_IMETHODIMP
 nsDNSService::Init()
 {
-    if (mResolver)
-        return NS_OK;
-    NS_ENSURE_TRUE(!mResolver, NS_ERROR_ALREADY_INITIALIZED);
-    // prefs
-    uint32_t maxCacheEntries  = 400;
-    uint32_t defaultCacheLifetime = 120; // seconds
-    uint32_t defaultGracePeriod = 60; // seconds
-    bool     disableIPv6      = false;
-    bool     offlineLocalhost = true;
-    bool     disablePrefetch  = false;
-    bool     blockDotOnion    = true;
-    int      proxyType        = nsIProtocolProxyService::PROXYCONFIG_DIRECT;
-    bool     notifyResolution = false;
-
-    nsAutoCString ipv4OnlyDomains;
-    nsAutoCString localDomains;
-    nsAutoCString forceResolve;
-
-    // read prefs
-    nsCOMPtr<nsIPrefBranch> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID);
-    if (prefs) {
-        int32_t val;
-        if (NS_SUCCEEDED(prefs->GetIntPref(kPrefDnsCacheEntries, &val)))
-            maxCacheEntries = (uint32_t) val;
-        if (NS_SUCCEEDED(prefs->GetIntPref(kPrefDnsCacheExpiration, &val)))
-            defaultCacheLifetime = val;
-        if (NS_SUCCEEDED(prefs->GetIntPref(kPrefDnsCacheGrace, &val)))
-            defaultGracePeriod = val;
+    MOZ_ASSERT(!mResolver);
+    MOZ_ASSERT(NS_IsMainThread());
 
-        // ASSUMPTION: pref branch does not modify out params on failure
-        prefs->GetBoolPref(kPrefDisableIPv6, &disableIPv6);
-        prefs->GetCharPref(kPrefIPv4OnlyDomains, ipv4OnlyDomains);
-        prefs->GetCharPref(kPrefDnsLocalDomains, localDomains);
-        prefs->GetCharPref(kPrefDnsForceResolve, forceResolve);
-        prefs->GetBoolPref(kPrefDnsOfflineLocalhost, &offlineLocalhost);
-        prefs->GetBoolPref(kPrefDisablePrefetch, &disablePrefetch);
-        prefs->GetBoolPref(kPrefBlockDotOnion, &blockDotOnion);
-
-        // If a manual proxy is in use, disable prefetch implicitly
-        prefs->GetIntPref("network.proxy.type", &proxyType);
-        prefs->GetBoolPref(kPrefDnsNotifyResolution, &notifyResolution);
-
-        if (mFirstTime) {
-            mFirstTime = false;
-
-            // register as prefs observer
-            prefs->AddObserver(kPrefDnsCacheEntries, this, false);
-            prefs->AddObserver(kPrefDnsCacheExpiration, this, false);
-            prefs->AddObserver(kPrefDnsCacheGrace, this, false);
-            prefs->AddObserver(kPrefIPv4OnlyDomains, this, false);
-            prefs->AddObserver(kPrefDnsLocalDomains, this, false);
-            prefs->AddObserver(kPrefDnsForceResolve, this, false);
-            prefs->AddObserver(kPrefDisableIPv6, this, false);
-            prefs->AddObserver(kPrefDnsOfflineLocalhost, this, false);
-            prefs->AddObserver(kPrefDisablePrefetch, this, false);
-            prefs->AddObserver(kPrefBlockDotOnion, this, false);
-            prefs->AddObserver(kPrefDnsNotifyResolution, this, false);
-
-            // Monitor these to see if there is a change in proxy configuration
-            // If a manual proxy is in use, disable prefetch implicitly
-            prefs->AddObserver("network.proxy.type", this, false);
-        }
-    }
+    ReadPrefs(nullptr);
 
     nsCOMPtr<nsIObserverService> observerService =
         mozilla::services::GetObserverService();
     if (observerService) {
         observerService->AddObserver(this, "last-pb-context-exited", false);
         observerService->AddObserver(this, NS_NETWORK_LINK_TOPIC, false);
+        observerService->AddObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID, false);
     }
 
-    nsDNSPrefetch::Initialize(this);
-
-    nsCOMPtr<nsIIDNService> idn = do_GetService(NS_IDNSERVICE_CONTRACTID);
-
     RefPtr<nsHostResolver> res;
-    nsresult rv = nsHostResolver::Create(maxCacheEntries,
-                                         defaultCacheLifetime,
-                                         defaultGracePeriod,
+    nsresult rv = nsHostResolver::Create(mResCacheEntries,
+                                         mResCacheExpiration,
+                                         mResCacheGrace,
                                          getter_AddRefs(res));
     if (NS_SUCCEEDED(rv)) {
         // now, set all of our member variables while holding the lock
         MutexAutoLock lock(mLock);
         mResolver = res;
-        mIDN = idn;
-        mIPv4OnlyDomains = ipv4OnlyDomains;
-        mOfflineLocalhost = offlineLocalhost;
-        mDisableIPv6 = disableIPv6;
-        mBlockDotOnion = blockDotOnion;
-        mForceResolve = forceResolve;
-        mForceResolveOn = !mForceResolve.IsEmpty();
-
-        // Disable prefetching either by explicit preference or if a manual proxy is configured
-        mDisablePrefetch = disablePrefetch || (proxyType == nsIProtocolProxyService::PROXYCONFIG_MANUAL);
+    }
 
-        mLocalDomains.Clear();
-        if (!localDomains.IsVoid()) {
-            nsCCharSeparatedTokenizer tokenizer(localDomains, ',',
-                                                nsCCharSeparatedTokenizer::SEPARATOR_OPTIONAL);
+    nsCOMPtr<nsIPrefBranch> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID);
+    if (prefs) {
+        // register as prefs observer
+        prefs->AddObserver(kPrefDnsCacheEntries, this, false);
+        prefs->AddObserver(kPrefDnsCacheExpiration, this, false);
+        prefs->AddObserver(kPrefDnsCacheGrace, this, false);
+        prefs->AddObserver(kPrefIPv4OnlyDomains, this, false);
+        prefs->AddObserver(kPrefDnsLocalDomains, this, false);
+        prefs->AddObserver(kPrefDnsForceResolve, this, false);
+        prefs->AddObserver(kPrefDisableIPv6, this, false);
+        prefs->AddObserver(kPrefDnsOfflineLocalhost, this, false);
+        prefs->AddObserver(kPrefDisablePrefetch, this, false);
+        prefs->AddObserver(kPrefBlockDotOnion, this, false);
+        prefs->AddObserver(kPrefDnsNotifyResolution, this, false);
 
-            while (tokenizer.hasMoreTokens()) {
-                mLocalDomains.PutEntry(tokenizer.nextToken());
-            }
-        }
-        mNotifyResolution = notifyResolution;
+        // Monitor these to see if there is a change in proxy configuration
+        // If a manual proxy is in use, disable prefetch implicitly
+        prefs->AddObserver("network.proxy.type", this, false);
     }
 
+    nsDNSPrefetch::Initialize(this);
+
     RegisterWeakMemoryReporter(this);
 
     mTrrService = new TRRService();
     if (NS_FAILED(mTrrService->Init())) {
         mTrrService = nullptr;
     }
 
-    return rv;
+    nsCOMPtr<nsIIDNService> idn = do_GetService(NS_IDNSERVICE_CONTRACTID);
+    mIDN = idn;
+
+    return NS_OK;
 }
 
 NS_IMETHODIMP
 nsDNSService::Shutdown()
 {
     UnregisterWeakMemoryReporter(this);
 
     RefPtr<nsHostResolver> res;
@@ -676,16 +711,17 @@ nsDNSService::Shutdown()
         res->Shutdown();
     }
 
     nsCOMPtr<nsIObserverService> observerService =
         mozilla::services::GetObserverService();
     if (observerService) {
         observerService->RemoveObserver(this, NS_NETWORK_LINK_TOPIC);
         observerService->RemoveObserver(this, "last-pb-context-exited");
+        observerService->RemoveObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID);
     }
 
     return NS_OK;
 }
 
 bool
 nsDNSService::GetOffline() const
 {
@@ -1108,50 +1144,40 @@ nsDNSService::GetMyHostName(nsACString &
         return NS_OK;
     }
     return NS_ERROR_FAILURE;
 }
 
 NS_IMETHODIMP
 nsDNSService::Observe(nsISupports *subject, const char *topic, const char16_t *data)
 {
-    // We are only getting called if a preference has changed or there's a
-    // network link event.
-    NS_ASSERTION(strcmp(topic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID) == 0 ||
-                 strcmp(topic, "last-pb-context-exited") == 0 ||
-                 strcmp(topic, NS_NETWORK_LINK_TOPIC) == 0,
-                 "unexpected observe call");
-
     bool flushCache = false;
     if (!strcmp(topic, NS_NETWORK_LINK_TOPIC)) {
         nsAutoCString converted = NS_ConvertUTF16toUTF8(data);
         if (mResolver && !strcmp(converted.get(), NS_NETWORK_LINK_DATA_CHANGED)) {
             flushCache = true;
         }
     } else if (!strcmp(topic, "last-pb-context-exited")) {
         flushCache = true;
+    } else if (!strcmp(topic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID)) {
+        ReadPrefs(NS_ConvertUTF16toUTF8(data).get());
+        NS_ENSURE_TRUE(mResolver, NS_ERROR_NOT_INITIALIZED);
+        if (mResolverPrefsUpdated && mResolver) {
+            mResolver->SetCacheLimits(mResCacheEntries, mResCacheExpiration,
+                                      mResCacheGrace);
+        }
+    } else if (!strcmp(topic, NS_XPCOM_SHUTDOWN_OBSERVER_ID)) {
+        Shutdown();
     }
+
     if (flushCache) {
         mResolver->FlushCache();
         return NS_OK;
     }
 
-    //
-    // Shutdown and this function are both only called on the UI thread, so we don't
-    // have to worry about mResolver being cleared out from under us.
-    //
-    // NOTE Shutting down and reinitializing the service like this is obviously
-    // suboptimal if Observe gets called several times in a row, but we don't
-    // expect that to be the case.
-    //
-
-    if (mResolver) {
-        Shutdown();
-    }
-    Init();
     return NS_OK;
 }
 
 uint16_t
 nsDNSService::GetAFForLookup(const nsACString &host, uint32_t flags)
 {
     if (mDisableIPv6 || (flags & RESOLVE_DISABLE_IPV6))
         return PR_AF_INET;
@@ -1239,9 +1265,8 @@ nsDNSService::CollectReports(nsIHandleRe
 {
     MOZ_COLLECT_REPORT(
         "explicit/network/dns-service", KIND_HEAP, UNITS_BYTES,
         SizeOfIncludingThis(DNSServiceMallocSizeOf),
         "Memory used for the DNS service.");
 
     return NS_OK;
 }
-
--- a/netwerk/dns/nsDNSService2.h
+++ b/netwerk/dns/nsDNSService2.h
@@ -46,16 +46,17 @@ protected:
 
     nsresult DeprecatedSyncResolve(const nsACString &aHostname,
                                    uint32_t flags,
                                    const mozilla::OriginAttributes &aOriginAttributes,
                                    nsIDNSRecord **result);
 private:
     ~nsDNSService();
 
+    nsresult ReadPrefs(const char *name);
     static already_AddRefed<nsDNSService> GetSingleton();
 
     uint16_t GetAFForLookup(const nsACString &host, uint32_t flags);
 
     nsresult PreprocessHostname(bool              aLocalDomain,
                                 const nsACString &aInput,
                                 nsIIDNService    *aIDN,
                                 nsACString       &aACE);
@@ -74,17 +75,22 @@ private:
     // mIPv4OnlyDomains is a comma-separated list of domains for which only
     // IPv4 DNS lookups are performed. This allows the user to disable IPv6 on
     // a per-domain basis and work around broken DNS servers. See bug 68796.
     nsCString                                 mIPv4OnlyDomains;
     nsCString                                 mForceResolve;
     bool                                      mDisableIPv6;
     bool                                      mDisablePrefetch;
     bool                                      mBlockDotOnion;
-    bool                                      mFirstTime;
     bool                                      mNotifyResolution;
     bool                                      mOfflineLocalhost;
     bool                                      mForceResolveOn;
+    uint32_t                                  mProxyType;
     nsTHashtable<nsCStringHashKey>            mLocalDomains;
     RefPtr<mozilla::net::TRRService>          mTrrService;
+
+    uint32_t                                  mResCacheEntries;
+    uint32_t                                  mResCacheExpiration;
+    uint32_t                                  mResCacheGrace;
+    bool                                      mResolverPrefsUpdated;
 };
 
 #endif //nsDNSService2_h__
--- a/netwerk/dns/nsHostResolver.cpp
+++ b/netwerk/dns/nsHostResolver.cpp
@@ -1860,16 +1860,27 @@ nsHostResolver::ThreadFunc(void *arg)
         }
     } while(true);
 
     resolver->mThreadCount--;
     resolver = nullptr;
     LOG(("DNS lookup thread - queue empty, thread finished.\n"));
 }
 
+void
+nsHostResolver::SetCacheLimits(uint32_t aMaxCacheEntries,
+                               uint32_t aDefaultCacheEntryLifetime,
+                               uint32_t aDefaultGracePeriod)
+{
+    MutexAutoLock lock(mLock);
+    mMaxCacheEntries = aMaxCacheEntries;
+    mDefaultCacheLifetime = aDefaultCacheEntryLifetime;
+    mDefaultGracePeriod = aDefaultGracePeriod;
+}
+
 nsresult
 nsHostResolver::Create(uint32_t maxCacheEntries,
                        uint32_t defaultCacheEntryLifetime,
                        uint32_t defaultGracePeriod,
                        nsHostResolver **result)
 {
     auto *res = new nsHostResolver(maxCacheEntries, defaultCacheEntryLifetime,
                                    defaultGracePeriod);
--- a/netwerk/dns/nsHostResolver.h
+++ b/netwerk/dns/nsHostResolver.h
@@ -305,16 +305,23 @@ public:
      * creates an addref'd instance of a nsHostResolver object.
      */
     static nsresult Create(uint32_t maxCacheEntries, // zero disables cache
                            uint32_t defaultCacheEntryLifetime, // seconds
                            uint32_t defaultGracePeriod, // seconds
                            nsHostResolver **resolver);
 
     /**
+     * Set (new) cache limits.
+     */
+    void SetCacheLimits(uint32_t maxCacheEntries, // zero disables cache
+                        uint32_t defaultCacheEntryLifetime, // seconds
+                        uint32_t defaultGracePeriod); // seconds
+
+    /**
      * puts the resolver in the shutdown state, which will cause any pending
      * callbacks to be detached.  any future calls to ResolveHost will fail.
      */
     void Shutdown();
 
     /**
      * resolve the given hostname and originAttributes asynchronously.  the caller
      * can synthesize a synchronous host lookup using a lock and a cvar.  as noted
--- a/netwerk/protocol/http/nsHttpHandler.cpp
+++ b/netwerk/protocol/http/nsHttpHandler.cpp
@@ -342,17 +342,17 @@ nsHttpHandler::SetFastOpenOSSupport()
     }
 #endif
 
     LOG(("nsHttpHandler::SetFastOpenOSSupport version %s", version.get()));
 
     if (NS_SUCCEEDED(rv)) {
         // set min version minus 1.
 #if XP_MACOSX
-        int min_version[] = {17, 4}; // High Sierra 10.13.4
+        int min_version[] = {17, 5}; // High Sierra 10.13.4
 #elif ANDROID
         int min_version[] = {4, 4};
 #elif XP_LINUX
         int min_version[] = {3, 6};
 #endif
         int inx = 0;
         nsCCharSeparatedTokenizer tokenizer(version, '.');
         while ((inx < 2) && tokenizer.hasMoreTokens()) {
--- a/npm-shrinkwrap.json
+++ b/npm-shrinkwrap.json
@@ -983,33 +983,33 @@
         "is-fullwidth-code-point": "2.0.0"
       }
     },
     "sprintf-js": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
       "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
     },
-    "string_decoder": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
-      "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
-      "requires": {
-        "safe-buffer": "5.1.1"
-      }
-    },
     "string-width": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
       "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
       "requires": {
         "is-fullwidth-code-point": "2.0.0",
         "strip-ansi": "4.0.0"
       }
     },
+    "string_decoder": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+      "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+      "requires": {
+        "safe-buffer": "5.1.1"
+      }
+    },
     "strip-ansi": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
       "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
       "requires": {
         "ansi-regex": "3.0.0"
       },
       "dependencies": {
--- a/python/mozrelease/mozrelease/platforms.py
+++ b/python/mozrelease/mozrelease/platforms.py
@@ -1,20 +1,17 @@
 from __future__ import absolute_import
 
 # ftp -> update platform map
 update_platform_map = {
     "android": ["Android_arm-eabi-gcc3"],
     "android-api-11": ["Android_arm-eabi-gcc3"],
     "android-api-15": ["Android_arm-eabi-gcc3"],
-    "android-api-15-old-id": ["Android_arm-eabi-gcc3"],
     "android-api-16": ["Android_arm-eabi-gcc3"],
-    "android-api-16-old-id": ["Android_arm-eabi-gcc3"],
     "android-x86": ["Android_x86-gcc3"],
-    "android-x86-old-id": ["Android_x86-gcc3"],
     "android-aarch64": ["Android_aarch64-gcc3"],
     "linux-i686": ["Linux_x86-gcc3"],
     "linux-x86_64": ["Linux_x86_64-gcc3"],
     "mac": ["Darwin_x86_64-gcc3-u-i386-x86_64",  # The main platofrm
             "Darwin_x86-gcc3-u-i386-x86_64",
             # We don"t ship builds with these build targets, but some users
             # modify their builds in a way that has them report like these.
             # See bug 1071576 for details.
--- a/security/manager/ssl/StaticHPKPins.h
+++ b/security/manager/ssl/StaticHPKPins.h
@@ -1158,9 +1158,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 = 485;
 
 static const int32_t kUnknownId = -1;
 
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1531169998600000);
+static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1531255523647000);
--- a/security/manager/ssl/nsSTSPreloadList.errors
+++ b/security/manager/ssl/nsSTSPreloadList.errors
@@ -46,17 +46,16 @@ 440hz-radio.de: could not connect to hos
 47tech.com: could not connect to host
 4baby.com.br: could not connect to host
 4d2.xyz: could not connect to host
 4loc.us: could not connect to host
 4mm.org: could not connect to host
 4web-hosting.com: could not connect to host
 5000yz.com: could not connect to host
 517vpn.cn: could not connect to host
-52kb.net: could not connect to host
 52kb1.com: could not connect to host
 52neptune.com: could not connect to host
 56877.com: could not connect to host
 5w5.la: could not connect to host
 68277.me: could not connect to host
 692b8c32.de: could not connect to host
 69mentor.com: could not connect to host
 6w6.la: could not connect to host
@@ -67,17 +66,16 @@ 87577.com: could not connect to host
 8887999.com: could not connect to host
 88laohu.cc: could not connect to host
 88laohu.com: could not connect to host
 8ackprotect.com: could not connect to host
 8ballbombom.uk: could not connect to host
 8t88.biz: could not connect to host
 91-freedom.com: could not connect to host
 99buffets.com: could not connect to host
-9ss6.com: could not connect to host
 a-intel.com: could not connect to host
 a-ix.net: could not connect to host
 aaron.xin: could not connect to host
 abi-fvs.de: could not connect to host
 abigailstark.com: could not connect to host
 abloop.com: could not connect to host
 abolition.co: could not connect to host
 abstractbarista.com: could not connect to host
@@ -93,76 +91,78 @@ achterhoekseveiligheidsbeurs.nl: could n
 acpinformatique.fr: could not connect to host
 acrossgw.com: could not connect to host
 activeclearweb.com: could not connect to host
 activitesaintnicaise.org: could not connect to host
 ad-disruptio.fr: could not connect to host
 adamcoffee.net: could not connect to host
 adamdixon.co.uk: could not connect to host
 adec-emsa.ae: could not connect to host
-adeline.mobi: could not connect to host
 admongo.gov: could not connect to host
 adrenaline-gaming.ru: could not connect to host
 adrianajewelry.my: could not connect to host
 adult.properties: could not connect to host
 advaithnikhi.ml: could not connect to host
 advaithnikhi.tk: could not connect to host
 advanced-online.eu: could not connect to host
 adventistdeploy.org: could not connect to host
 adzie.xyz: could not connect to host
 aevpn.org: could not connect to host
 affiliateroyale.com: could not connect to host
 affily.io: could not connect to host
 afterstack.net: could not connect to host
 agdalieso.com.ba: could not connect to host
+agent-grow.com: could not connect to host
 agingstop.net: could not connect to host
 agoravm.tk: could not connect to host
 agowa.eu: could not connect to host
 agowa338.de: could not connect to host
 agrilinks.org: could not connect to host
 ahelos.tk: could not connect to host
 ahkubiak.ovh: could not connect to host
 ahlz.sk: could not connect to host
 aikenorganics.com: could not connect to host
 aim-consultants.com: could not connect to host
 aimrom.org: could not connect to host
 ajetaci.cz: could not connect to host
-akfoundationindia.com: 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
 akritikos.info: could not connect to host
-akshi.in: could not connect to host
 akul.co.in: could not connect to host
 al-f.net: could not connect to host
 alasta.info: could not connect to host
 alauda-home.de: could not connect to host
 albertify.xyz: could not connect to host
 alcatraz.online: could not connect to host
+aldred.cloud: could not connect to host
 aleax.me: could not connect to host
+alessandro.pw: could not connect to host
 alexandernorth.ch: could not connect to host
 alexey-shamara.ru: could not connect to host
 alexhaydock.co.uk: could not connect to host
 alexismeza.dk: could not connect to host
 alexmol.tk: could not connect to host
 algarmatic-automatismos.pt: could not connect to host
 alibababee.com: could not connect to host
 alignrs.com: could not connect to host
 alilialili.ga: could not connect to host
+alix-board.de: could not connect to host
 alldm.ru: could not connect to host
 allenosgood.com: could not connect to host
 alloutatl.com: could not connect to host
 allscammers.exposed: could not connect to host
 allthingsfpl.com: could not connect to host
 alocato.com: could not connect to host
 alpe-d-or.dyn-o-saur.com: could not connect to host
 alphabrock.cn: could not connect to host
 alphahunks.com: could not connect to host
 altahrim.net: could not connect to host
 altered.network: could not connect to host
+alwaysonssl.com: could not connect to host
 amaderelectronics.com: could not connect to host
 amdouglas.uk: could not connect to host
 ameho.me: could not connect to host
 americandistribuidora.com: could not connect to host
 amilum.org: could not connect to host
 amua.fr: could not connect to host
 amunoz.org: could not connect to host
 anadoluefessk.org: could not connect to host
@@ -174,34 +174,35 @@ andreas-kluge.eu: could not connect to h
 andreaskluge.eu: could not connect to host
 andrei-coman.com: could not connect to host
 andrewdaws.co: could not connect to host
 andrewdaws.info: could not connect to host
 andrewdaws.me: could not connect to host
 andrewdaws.tv: could not connect to host
 andrewrdaws.com: could not connect to host
 andronika.net: could not connect to host
-andys-place.co.uk: could not connect to host
 anecuni-club.com: could not connect to host
 anecuni-rec.com: could not connect to host
 angrydragonproductions.com: could not connect to host
 anitube-nocookie.ch: could not connect to host
 anivar.net: could not connect to host
 annetaan.fi: could not connect to host
 anonboards.com: could not connect to host
+anonrea.ch: could not connect to host
 anshumanbiswas.com: could not connect to host
-antennista.pavia.it: could not connect to host
 antimatiere.space: could not connect to host
 anyways.at: could not connect to host
 aojiao.org: could not connect to host
+aopsy.de: could not connect to host
 apkoyunlar.club: could not connect to host
 appdrinks.com: could not connect to host
 apple.ax: could not connect to host
 apps4all.sytes.net: could not connect to host
 apptoutou.com: could not connect to host
+apu-board.de: could not connect to host
 aqqrate.com: could not connect to host
 aquireceitas.com: could not connect to host
 arawaza.biz: could not connect to host
 arckr.com: could not connect to host
 ardor.noip.me: could not connect to host
 area3.org: could not connect to host
 arent.kz: could not connect to host
 arenzanaphotography.com: could not connect to host
@@ -215,65 +216,63 @@ arrivedconsulting.com: could not connect
 arsenal.ru: could not connect to host
 arsk1.com: could not connect to host
 artea.ga: could not connect to host
 artemis.re: could not connect to host
 articaexports.com: could not connect to host
 artisense.de: could not connect to host
 artisticedgegranite.net: could not connect to host
 artofeyes.nl: could not connect to host
-asana.studio: could not connect to host
 ascii.moe: could not connect to host
 ashleyadum.com: could not connect to host
 asphaltfruehling.de: could not connect to host
 asphyxia.su: could not connect to host
-aspisdata.com: could not connect to host
 asral7.com: could not connect to host
 assdecoeur.org: could not connect to host
 assetsupervision.com: could not connect to host
 assindia.nl: could not connect to host
 asthon.cn: could not connect to host
 astrath.net: could not connect to host
 astrea-voetbal-groningen.nl: could not connect to host
 astutr.co: could not connect to host
 asuhe.win: could not connect to host
 asuhe.xyz: could not connect to host
 async.be: could not connect to host
 at1.co: could not connect to host
 athi.pl: could not connect to host
 atigerseye.com: could not connect to host
 atlas-5.site: could not connect to host
-atraining.ru: could not connect to host
 au2pb.org: could not connect to host
+audividi.shop: could not connect to host
 aufmerksamkeitsstudie.com: could not connect to host
 augix.net: could not connect to host
 ausec.ch: could not connect to host
 ausschreibungen-suedtirol.it: could not connect to host
 austinsutphin.com: could not connect to host
 australiancattle.dog: could not connect to host
-australianimmigrationadvisors.com.au: could not connect to host
 authint.com: could not connect to host
 authland.com: could not connect to host
+authorsguild.in: could not connect to host
 authsrv.nl.eu.org: could not connect to host
 autosearch.me: could not connect to host
 autostock.me: could not connect to host
 autostop-occasions.be: could not connect to host
 avaq.fr: could not connect to host
 avdelivers.com: could not connect to host
 avmo.pw: could not connect to host
 avonlearningcampus.com: could not connect to host
 avso.pw: could not connect to host
 avxo.pw: could not connect to host
 awan.tech: could not connect to host
 awei.pub: could not connect to host
 awf0.xyz: could not connect to host
 awxg.eu.org: could not connect to host
 axel-fischer.science: could not connect to host
 axxial.tk: could not connect to host
-b303.me: could not connect to host
+azuxul.fr: could not connect to host
 b9winner.com: could not connect to host
 babelfisch.eu: could not connect to host
 babystep.tv: could not connect to host
 bacimg.com: could not connect to host
 badbee.cc: could not connect to host
 bakabt.info: could not connect to host
 balonmano.co: could not connect to host
 bandally.net: could not connect to host
@@ -291,16 +290,17 @@ bbdos.ru: could not connect to host
 bbwteens.org: could not connect to host
 bcradio.org: could not connect to host
 bdikaros-network.net: could not connect to host
 bdsmxxxpics.com: could not connect to host
 beamitapp.com: could not connect to host
 beasel.biz: could not connect to host
 beauty-italy.ru: could not connect to host
 beccajoshwedding.com: could not connect to host
+becubed.co: could not connect to host
 beersandco.ch: could not connect to host
 bellavistaoutdoor.com: could not connect to host
 belpbleibtbelp.ch: could not connect to host
 belwederczykow.eu: could not connect to host
 ben.ninja: could not connect to host
 benevisim.com: could not connect to host
 benfairclough.com: could not connect to host
 benjamin-horvath.com: could not connect to host
@@ -349,44 +349,41 @@ bitcoinec.info: could not connect to hos
 bitcoinjpn.com: could not connect to host
 bitmain.com.ua: could not connect to host
 bitmaincare.com.ua: could not connect to host
 bitmaincare.ru: could not connect to host
 bitmessage.ch: could not connect to host
 bityes.org: could not connect to host
 bjgongyi.com: could not connect to host
 bjtxl.cn: could not connect to host
-bklaindia.com: could not connect to host
 black-khat.com: could not connect to host
 blackberrycentral.com: could not connect to host
 blackdragoninc.org: could not connect to host
 blackscreen.me: could not connect to host
 blameomar.com: could not connect to host
 blantik.net: could not connect to host
 blazeit.io: could not connect to host
 blindaryproduction.tk: 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
 blogabout.ru: could not connect to host
 blueblou.com: could not connect to host
-blueflare.org: could not connect to host
 blumen-garage.de: could not connect to host
 bm-i.ch: could not connect to host
 bodybuilding.events: could not connect to host
 bolivarfm.com.ve: could not connect to host
 bomberus.de: could not connect to host
 bombsquad.studio: could not connect to host
 bonobo.cz: could not connect to host
 bookreport.ga: could not connect to host
 booter.es: could not connect to host
 boozinyan.com: could not connect to host
 bopera.co.uk: could not connect to host
 borchers-media.de: could not connect to host
-boris64.net: could not connect to host
 borisbesemer.com: could not connect to host
 boxdevigneron.fr: could not connect to host
 bpadvisors.eu: could not connect to host
 bqcp.net: could not connect to host
 bragaweb.com.br: could not connect to host
 braintensive.com: could not connect to host
 brakstad.org: could not connect to host
 brandontaylor-black.com: could not connect to host
@@ -456,50 +453,49 @@ cardloan-manual.net: could not connect t
 carey.bio: could not connect to host
 carloshmm.com: could not connect to host
 carloshmm.stream: could not connect to host
 carlovanwyk.com: could not connect to host
 carrando.de: could not connect to host
 cashfortulsahouses.com: could not connect to host
 cashsector.ga: could not connect to host
 casinoreal.com: could not connect to host
-casjay.us: could not connect to host
 catcontent.cloud: could not connect to host
 catsmagic.pp.ua: could not connect to host
 caughtredhanded.co.nz: could not connect to host
-cbdev.de: could not connect to host
 ccayearbook.com: could not connect to host
 ccl-sti.ch: could not connect to host
 ccprwebsite.org: could not connect to host
 cctld.com: could not connect to host
-cdeck.net: could not connect to host
 cdmhp.org.nz: could not connect to host
 cdmon.tech: could not connect to host
 cdnk39.com: could not connect to host
 cee.io: could not connect to host
 cegfw.com: could not connect to host
 cencalvia.org: could not connect to host
 centos.pub: could not connect to host
 centrallead.net: could not connect to host
-centreoeil.ch: could not connect to host
+cf-ide.de: could not connect to host
 cgtx.us: could not connect to host
 challengeskins.com: could not connect to host
 championnat-romand-cuisiniers-amateurs.ch: could not connect to host
 channellife.asia: could not connect to host
 chaouby.com: could not connect to host
 charge.co: could not connect to host
 charmyadesara.com: could not connect to host
 chatnbook.com: could not connect to host
 chatsworthelectrical.com: could not connect to host
 cheah.xyz: could not connect to host
 cheesefusion.com: could not connect to host
 chez-janine.de: could not connect to host
 chicorycom.net: could not connect to host
+chikory.com: could not connect to host
 china-line.org: could not connect to host
 chinternet.xyz: could not connect to host
+chksite.com: could not connect to host
 chloe.re: could not connect to host
 chocolat-suisse.ch: could not connect to host
 chorkley.me: could not connect to host
 chrisebert.net: could not connect to host
 christianhoffmann.info: could not connect to host
 christianpusch.de: could not connect to host
 christiansayswords.com: could not connect to host
 chromaryu.net: could not connect to host
@@ -538,28 +534,29 @@ cnwage.com: could not connect to host
 cnwarn.com: could not connect to host
 co-yutaka.com: could not connect to host
 cobaltlp.com: could not connect to host
 coccinellaskitchen.com: could not connect to host
 coccinellaskitchen.de: could not connect to host
 coccinellaskitchen.it: could not connect to host
 codeloop.pw: could not connect to host
 codenlife.xyz: could not connect to host
+codeofhonor.tech: could not connect to host
 coderhangout.com: could not connect to host
 codewiz.xyz: could not connect to host
 cogumelosmagicos.org: could not connect to host
 colarelli.ch: could not connect to host
 colleencornez.com: could not connect to host
 collins.kg: could not connect to host
+colo-tech.com: could not connect to host
 colorectalcompounding.com: could not connect to host
 com-in.de: could not connect to host
 com.cc: could not connect to host
 comicrelief.com: could not connect to host
 comiq.io: could not connect to host
-compareandrecycle.com: could not connect to host
 compeuphoria.com: could not connect to host
 complex-organization.com: could not connect to host
 complt.xyz: could not connect to host
 comprehensiveihc.com: could not connect to host
 conception.sk: could not connect to host
 conejovalleyelectrical.com: could not connect to host
 conniesacademy.com: could not connect to host
 conrad.am: could not connect to host
@@ -568,68 +565,67 @@ corecdn.org: could not connect to host
 corinnanese.de: could not connect to host
 correct.horse: could not connect to host
 cosmeticosdelivery.com.br: could not connect to host
 cosmeticosnet.com.br: could not connect to host
 cosmiatria.pe: could not connect to host
 cosplayer.com: could not connect to host
 cotta.dk: could not connect to host
 coumoul.fr: could not connect to host
+courtlistener.com: could not connect to host
 cpaneltips.com: could not connect to host
 crackslut.eu: could not connect to host
 craftination.net: could not connect to host
 craftydev.design: could not connect to host
 crashsec.com: could not connect to host
 creativecommonscatpictures.com: could not connect to host
+creato.top: could not connect to host
 credential.eu: could not connect to host
 creditreporttips.net: 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
 crox.co: could not connect to host
 cryptoisnotacrime.org: could not connect to host
 cryptoki.fr: could not connect to host
 cryptolosophy.io: could not connect to host
 cryptoparty.dk: could not connect to host
 cryptopartynewcastle.org: could not connect to host
 cryptoshot.pw: could not connect to host
 cselzer.com: could not connect to host
 csgo.help: could not connect to host
 csgo77.com: could not connect to host
 csilies.de: could not connect to host
-cube-cloud.com: could not connect to host
 cunha.be: could not connect to host
 cuni-cuni-club.com: could not connect to host
 cuni-rec.com: could not connect to host
 cuonic.com: could not connect to host
 curacao-license.com: could not connect to host
 customfilmworks.com: could not connect to host
 customizeyourshower.com: could not connect to host
 customizeyoursink.com: could not connect to host
 cybbh.space: could not connect to host
 cyber-computer.club: could not connect to host
 cyber-perikarp.eu: could not connect to host
 cyberpeace.nl: could not connect to host
 cyberstatus.de: could not connect to host
 cyberxpert.nl: could not connect to host
 cyclehackluxembourgcity.lu: could not connect to host
-cype.dedyn.io: could not connect to host
 cypherpunk.ws: could not connect to host
 czlx.co: could not connect to host
 d-bood.site: could not connect to host
 d0xq.net: could not connect to host
 d3x.pw: could not connect to host
 d4rkdeagle.tk: could not connect to host
 d8studio.net: could not connect to host
 daltonedwards.me: could not connect to host
 dam74.com.ar: could not connect to host
 damjanovic.work: could not connect to host
 dandymrsb.com: could not connect to host
 daniel-stahl.net: could not connect to host
-danielvoogsgerd.nl: could not connect to host
 darkdestiny.ch: could not connect to host
 daropia.org: could not connect to host
 darrienworth.com: could not connect to host
 daryl.moe: could not connect to host
 dashboard.yt: could not connect to host
 data-detox.com: could not connect to host
 datamatic.ru: could not connect to host
 datastream.re: could not connect to host
@@ -671,22 +667,22 @@ detecte-fuite.ch: could not connect to h
 detecte.ch: could not connect to host
 detectefuite.ch: could not connect to host
 devdesco.com: could not connect to host
 developersclub.website: could not connect to host
 devenney.io: could not connect to host
 devops.moe: could not connect to host
 dezintranet.com: could not connect to host
 dfixit.com: could not connect to host
-dgt-portal.de: could not connect to host
 dharamkot.com: could not connect to host
 dhl-smart.ch: could not connect to host
 dhub.xyz: could not connect to host
 dhxxls.com: could not connect to host
 diceduels.com: could not connect to host
+dichvudangkygiayphep.com: could not connect to host
 dick.red: could not connect to host
 die-gruenen-teufel.de: could not connect to host
 diemogebhardt.com: could not connect to host
 dieser.me: could not connect to host
 digihyp.ch: could not connect to host
 digioccumss.ddns.net: could not connect to host
 digitalfishfun.com: could not connect to host
 digitalrxcloud.com: could not connect to host
@@ -706,17 +702,16 @@ disclosure.io: could not connect to host
 disco-crazy-world.de: could not connect to host
 discord-chan.net: could not connect to host
 discoveringdocker.com: could not connect to host
 discoveryballoon.org: could not connect to host
 disinisharing.com: could not connect to host
 distinctivephotography.com.au: could not connect to host
 distrilogservices.com: could not connect to host
 ditch.ch: could not connect to host
-divegearexpress.com.cn: could not connect to host
 dixmag.com: could not connect to host
 diz.in.ua: could not connect to host
 djul.net: could not connect to host
 dlouwrink.nl: could not connect to host
 dlyl888.com: could not connect to host
 dna.li: could not connect to host
 dnfc.rocks: could not connect to host
 dnmaze.com: could not connect to host
@@ -750,23 +745,26 @@ driving-lessons.co.uk: could not connect
 drivinghorror.com: could not connect to host
 drixn.cn: could not connect to host
 drixn.info: could not connect to host
 drixn.net: could not connect to host
 drizz.com.br: could not connect to host
 drobniuch.pl: could not connect to host
 drogoz.moe: could not connect to host
 droomhuis-in-zuid-holland-kopen.nl: could not connect to host
+dtx.sk: could not connect to host
 duch.cloud: could not connect to host
 duelsow.eu: could not connect to host
 dujsq.com: could not connect to host
 dujsq.top: could not connect to host
+dunamiscommunity.com: could not connect to host
 duo.money: could not connect to host
 durangoenergyllc.com: could not connect to host
 dwnld.me: could not connect to host
+dxm.no-ip.biz: could not connect to host
 dynamic-networks.be: could not connect to host
 e-mak.eu: could not connect to host
 e-wishlist.net: could not connect to host
 eagle-yard.de: could not connect to host
 eagleridgecampground.com: could not connect to host
 earth-people.org: could not connect to host
 eatfitoutlet.com.br: could not connect to host
 ebonyriddle.com: could not connect to host
@@ -804,64 +802,60 @@ elytronsecurity.com: could not connect t
 emaily.eu: could not connect to host
 embellir-aroma.com: could not connect to host
 embellir-kyujin.com: could not connect to host
 embracethedarkness.co.uk: could not connect to host
 eminhuseynov.com: could not connect to host
 emmehair.com: could not connect to host
 emperor.blog: could not connect to host
 empire24.co: could not connect to host
-emrenovation.com: could not connect to host
 endofnet.org: could not connect to host
 endohaus.us: could not connect to host
 endspamwith.us: could not connect to host
 enoou.com: could not connect to host
 enpalmademallorca.info: could not connect to host
 enskat.de: could not connect to host
 enskatson-sippe.de: could not connect to host
 entaurus.com: could not connect to host
 enterprisey.enterprises: could not connect to host
 envelope.co.nz: could not connect to host
 eolme.ml: could not connect to host
 er-music.com: could not connect to host
 erad.fr: could not connect to host
 erclab.kr: could not connect to host
+erethon.com: could not connect to host
 ericloud.tk: could not connect to host
 erigrid.eu: could not connect to host
 erspro.net: could not connect to host
 es888999.com: could not connect to host
 esoterik.link: could not connect to host
 essentialoilsimports.com: could not connect to host
 esseriumani.com: could not connect to host
 ethanfaust.com: could not connect to host
-etincelle.ml: could not connect to host
 etzi.myds.me: could not connect to host
 euexia.fr: could not connect to host
 eung.ga: could not connect to host
 euph.eu: could not connect to host
 eurostrategy.vn.ua: could not connect to host
 evankurniawan.com: could not connect to host
 evasioncreole.com: could not connect to host
 eventaro.com: could not connect to host
 eventmake.es: could not connect to host
 everyarti.st: could not connect to host
 everygayporn.com: could not connect to host
 eveshaiwu.com: could not connect to host
-evileden.com: could not connect to host
 ewe2.ninja: could not connect to host
 eworksmedia.com: could not connect to host
 exceptionalservices.us: could not connect to host
 exo.do: could not connect to host
-expxkcd.com: could not connect to host
 exteriorservices.io: could not connect to host
 extratorrent.fyi: could not connect to host
 extratorrent.red: could not connect to host
 extratorrent.world: could not connect to host
 eytosh.net: could not connect to host
-eztvtorrent.com: could not connect to host
 f1bigpicture.com: could not connect to host
 f8842.com: could not connect to host
 faber.org.ru: could not connect to host
 fabian-kluge.de: could not connect to host
 fabienbaker.com: could not connect to host
 fabulouslyyouthfulskin.com: could not connect to host
 fabulouslyyouthfulskineyeserum.com: could not connect to host
 facebook.ax: could not connect to host
@@ -928,17 +922,16 @@ flyss.net: could not connect to host
 fmovies.life: could not connect to host
 focalforest.com: could not connect to host
 fognini-depablo.eu: could not connect to host
 foo.hamburg: could not connect to host
 foodserve.in: could not connect to host
 forcamp.ga: could not connect to host
 forsyththeatre.com: could not connect to host
 fortuna-loessnitz.de: 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
 foudufafa.de: could not connect to host
 foxyslut.com: could not connect to host
 fragnic.com: could not connect to host
 francescoservida.ch: could not connect to host
 frank.fyi: could not connect to host
 franklinhua.com: could not connect to host
@@ -977,34 +970,32 @@ funoverip.net: could not connect to host
 funspins.com: could not connect to host
 futos.de: could not connect to host
 futuresonline.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 116"  data: no]
 fuzoku-sodan.com: could not connect to host
 fxgame.online: could not connect to host
 fyol.pw: could not connect to host
 g01.in.ua: could not connect to host
 g1jeu.com: could not connect to host
-gabethebabetv.com: could not connect to host
 gabriele-kluge.de: could not connect to host
 gafachi.com: could not connect to host
 galgoafegao.com.br: could not connect to host
 galgoingles.com.br: could not connect to host
 gam3rs.de: could not connect to host
 game-gentle.com: could not connect to host
 gameswitchers.uk: could not connect to host
 gametium.com: could not connect to host
 gametium.es: could not connect to host
 gamhealth.net: could not connect to host
 garage-door.pro: could not connect to host
 gasbarkenora.com: could not connect to host
 gasnews.net: could not connect to host
 gautham.pro: could not connect to host
 gay-jays.com: could not connect to host
 gaygeeks.de: could not connect to host
-gazellegames.net: could not connect to host
 gc.net: could not connect to host
 gdevpenze.ru: could not connect to host
 gdhzcgs.com: could not connect to host
 gdz-otvety.com: could not connect to host
 ge1.me: could not connect to host
 gear-acquisition-syndrome.community: could not connect to host
 geeks.berlin: could not connect to host
 gehrke.nrw: could not connect to host
@@ -1033,17 +1024,19 @@ gevaulug.fr: could not connect to host
 gfoss.gr: could not connect to host
 gglks.com: could not connect to host
 ggss.cf: could not connect to host
 gh16.com.ar: could not connect to host
 gifzilla.net: could not connect to host
 gina-architektur.design: could not connect to host
 girlsnet.work: could not connect to host
 git.co: could not connect to host
+gitstuff.tk: could not connect to host
 gix.net.pl: could not connect to host
+glenavy.tk: could not connect to host
 globalelite.black: could not connect to host
 globalnewsdaily.cf: could not connect to host
 globaltennis.ca: could not connect to host
 globalvisions-events.ch: could not connect to host
 glutenfreelife.co.nz: could not connect to host
 glyph.ws: could not connect to host
 gmanukyan.com: could not connect to host
 gnom.me: could not connect to host
@@ -1067,27 +1060,25 @@ gradsm-ci.net: could not connect to host
 grande.coffee: could not connect to host
 granth.io: could not connect to host
 graphite.org.uk: could not connect to host
 gratisonlinesex.com: could not connect to host
 great.nagoya: could not connect to host
 greggsfoundation.org.uk: could not connect to host
 gregmartyn.com: could not connect to host
 greuel.online: could not connect to host
-greve.xyz: could not connect to host
 greyhash.se: could not connect to host
 gritte.net: could not connect to host
 grossmisconduct.news: could not connect to host
 growingmetrics.com: could not connect to host
 grusig-geil.ch: could not connect to host
 gsmkungen.com: could not connect to host
 gtalife.net: could not connect to host
-guendra.dedyn.io: could not connect to host
 gugaltika-ipb.org: could not connect to host
-gugert.net: could not connect to host
+guildgearscore.cf: could not connect to host
 guinea-pig.co: could not connect to host
 gunhunter.com: could not connect to host
 gus.moe: could not connect to host
 gvchannel.xyz: could not connect to host
 gxgx.org: could not connect to host
 gzitech.net: could not connect to host
 gzpblog.com: could not connect to host
 h2cdn.cloud: could not connect to host
@@ -1103,17 +1094,16 @@ half-logic.eu.org: could not connect to 
 halta.info: could not connect to host
 hamking.tk: could not connect to host
 hamu.blue: could not connect to host
 hanksservice.com: could not connect to host
 happytiger.eu: could not connect to host
 hapsfordmill.co.uk: could not connect to host
 hapvm.com: could not connect to host
 hardergayporn.com: could not connect to host
-hardfalcon.net: could not connect to host
 harrypottereditor.net: could not connect to host
 harschnitz.nl: could not connect to host
 has-no-email-set.de: could not connect to host
 hasabig.wang: could not connect to host
 hasalittle.wang: could not connect to host
 hashimah.ca: could not connect to host
 hashplex.com: could not connect to host
 hatethe.uk: could not connect to host
@@ -1163,17 +1153,16 @@ holidayincotswolds.co.uk: could not conn
 holowaty.me: could not connect to host
 home-cloud.online: could not connect to host
 homecoming.city: could not connect to host
 homesfordinner.ca: could not connect to host
 homoglyph.net: could not connect to host
 honeytracks.com: could not connect to host
 hoodoo.io: could not connect to host
 hoodoo.tech: could not connect to host
-hoopertechnicalsolutions.com: could not connect to host
 hopglass.eu: could not connect to host
 hopglass.net: could not connect to host
 horvathd.eu: could not connect to host
 hosted-oswa.org: could not connect to host
 hostingfirst.nl: could not connect to host
 hotelmadhuwanvihar.com: could not connect to host
 houseinvestor.com: could not connect to host
 how2fsbo.com: could not connect to host
@@ -1264,23 +1253,25 @@ inschrijfformulier.com: could not connec
 inscript.pl: could not connect to host
 insouciant.org: could not connect to host
 inst.mobi: could not connect to host
 instasex.ch: could not connect to host
 int-ext-design.fr: could not connect to host
 int-ma.in: could not connect to host
 integrityingovernmentidaho.com: could not connect to host
 intelldynamics.com: could not connect to host
+intelliance.eu: could not connect to host
 interiordesignsconcept.com: could not connect to host
 interspot.nl: could not connect to host
 interviewpipeline.co.uk: could not connect to host
 intracom.com: could not connect to host
 invenio.software: could not connect to host
 investingdiary.cn: could not connect to host
 investorloanshub.com: could not connect to host
+invkao.com: could not connect to host
 iodu.re: could not connect to host
 ionc.ca: could not connect to host
 ip.or.at: could not connect to host
 ipcfg.me: could not connect to host
 ipfirebox.de: could not connect to host
 iphonechina.net: could not connect to host
 iplog.info: could not connect to host
 ipnetworking.net: could not connect to host
@@ -1307,17 +1298,16 @@ iwos.io: could not connect to host
 j0ng.xyz: could not connect to host
 jackyyf.com: could not connect to host
 jaimechanaga.com: could not connect to host
 jaion.ml: could not connect to host
 jakincode.army: could not connect to host
 jaksel.id: could not connect to host
 jamesevans.is: could not connect to host
 jamesheald.com: could not connect to host
-jamieweb.org: could not connect to host
 jan-bucher.ch: could not connect to host
 janheidler.dynv6.net: could not connect to host
 janssen.fm: could not connect to host
 japan4you.org: could not connect to host
 jasonwindholz.com: could not connect to host
 javascriptlab.fr: could not connect to host
 jazzinutrecht.info: could not connect to host
 jbbd.fr: could not connect to host
@@ -1329,62 +1319,63 @@ jeankygourmet.com: could not connect to 
 jecho.cn: could not connect to host
 jeffersonregan.org: could not connect to host
 jeffhuxley.com: could not connect to host
 jens.hk: could not connect to host
 jerrypau.ca: could not connect to host
 jhburton.co.uk: could not connect to host
 jhermsmeier.de: could not connect to host
 jiaqiang.vip: could not connect to host
+jigsawdevelopments.com: could not connect to host
 jmb.lc: could not connect to host
 jmvbmx.ch: could not connect to host
 jobmedic.com: could not connect to host
 joecod.es: could not connect to host
 joehenry.co.uk: could not connect to host
 joetyson.io: could not connect to host
 johanneskonrad.de: could not connect to host
 johntomasowa.com: could not connect to host
 jonathanmassacand.ch: could not connect to host
 jonathansanchez.pro: could not connect to host
 jonfor.net: could not connect to host
 jooto.com: could not connect to host
-jornadasciberdefensa2016.es: could not connect to host
 jpod.cc: could not connect to host
 jsjyhzy.cc: could not connect to host
 juliaoantiguidades.com.br: could not connect to host
 juliawebber.co.za: could not connect to host
 jumbopan.com: could not connect to host
 jumbopan.net: could not connect to host
+jurko.cz: could not connect to host
 jurriaan.ninja: could not connect to host
 just-pools.co.za: could not connect to host
 justinharrison.ca: could not connect to host
 justzz.xyz: 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
 kainz.be: could not connect to host
 kalender.goip.de: could not connect to host
 kalilinux.tech: could not connect to host
 kaloix.de: could not connect to host
 kamalame.co: could not connect to host
 kamitech.ch: could not connect to host
 kancolle.me: could not connect to host
+kandalife.com: could not connect to host
 kanganer.com: could not connect to host
 kangzaber.com: could not connect to host
 kapo.info: could not connect to host
-karguine.in: could not connect to host
 karuneshjohri.com: could not connect to host
 kat.al: could not connect to host
 katyusha.net: could not connect to host
 kawaiiku.com: could not connect to host
 kawaiiku.de: could not connect to host
 kaydan.io: could not connect to host
 kayipmurekkep.com: could not connect to host
 kearney.io: could not connect to host
 keezin.ga: could not connect to host
+keithws.net: could not connect to host
 kellyandantony.com: could not connect to host
 kelm.me: could not connect to host
 kennynet.co.uk: could not connect to host
 kermadec.com: could not connect to host
 keshausconsulting.com: could not connect to host
 kevindekoninck.com: could not connect to host
 kevinfoley.cc: could not connect to host
 kevinfoley.org: could not connect to host
@@ -1425,16 +1416,17 @@ korni22.org: could not connect to host
 kotitesti.fi: could not connect to host
 kotorimusic.ga: could not connect to host
 kouten-jp.com: could not connect to host
 kozmik.co: could not connect to host
 kpvpn.com: could not connect to host
 krampus-fischamend.at: could not connect to host
 kriegskindernothilfe.de: could not connect to host
 kriptosec.com: could not connect to host
+kroon.email: could not connect to host
 kruin.net: could not connect to host
 ktube.yt: could not connect to host
 kubusadvocaten.nl: could not connect to host
 kuko-crews.org: could not connect to host
 kuwago.io: could not connect to host
 kwikmed.eu: could not connect to host
 kwipi.com: could not connect to host
 kyberna.xyz: could not connect to host
@@ -1499,24 +1491,24 @@ lettland-firma.com: could not connect to
 leveredge.net: could not connect to host
 lezdomsm.com: could not connect to host
 lfaz.org: could not connect to host
 lheinrich.org: could not connect to host
 lhsj28.com: could not connect to host
 lhsj68.com: could not connect to host
 lhsj78.com: could not connect to host
 liaozheqi.cn: could not connect to host
-liautard.fr: could not connect to host
 libertas-tech.com: could not connect to host
 libscode.com: could not connect to host
 liceserv.com: could not connect to host
 lied8.eu: could not connect to host
 lifeinsurances.pro: could not connect to host
 lifeinsurances24.com: could not connect to host
 like.lgbt: could not connect to host
+likeaross.com: could not connect to host
 likenosis.com: could not connect to host
 linkages.org: could not connect to host
 linksanitizer.com: could not connect to host
 linksextremist.at: could not connect to host
 linley.de: could not connect to host
 linux-admin-california.com: could not connect to host
 linux.sb: could not connect to host
 linuxcode.net: could not connect to host
@@ -1567,16 +1559,17 @@ luom.net: could not connect to host
 lzqii.cn: could not connect to host
 m-generator.com: could not connect to host
 m-kleinert.de: could not connect to host
 m4570.xyz: could not connect to host
 m4g.ru: could not connect to host
 maartenterpstra.xyz: could not connect to host
 madeintucson.org: could not connect to host
 madnetwork.org: could not connect to host
+maelstrom.ninja: could not connect to host
 magicball.co: 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
 mailon.ga: could not connect to host
 majahoidja.ee: could not connect to host
 makeit-so.de: could not connect to host
 makeuplove.nl: could not connect to host
@@ -1648,20 +1641,22 @@ memepasmal.org: could not connect to hos
 menchez.me: could not connect to host
 menzaijia.com: could not connect to host
 mercanix.co.uk: could not connect to host
 metaether.net: could not connect to host
 metrix-money-ptc.com: could not connect to host
 metrix.design: could not connect to host
 mexior.nl: could not connect to host
 meyeraviation.com: could not connect to host
+mia.ac: could not connect to host
 michaelcullen.name: could not connect to host
 michaelkuchta.me: could not connect to host
 michaelsulzer.com: could not connect to host
 michaelsulzer.eu: could not connect to host
+michalvasicek.cz: could not connect to host
 michasfahrschule.com: could not connect to host
 microblading.pe: could not connect to host
 microlinks.org: could not connect to host
 mieterschutzkartei.de: could not connect to host
 mikeybot.com: could not connect to host
 millionairessecrets.com: could not connect to host
 min.kiwi: could not connect to host
 minantavla.se: could not connect to host
@@ -1746,43 +1741,41 @@ mushman.tk: could not connect to host
 muslimbanter.co.za: could not connect to host
 mxawei.cn: could not connect to host
 mxlife.org: could not connect to host
 my-demo.co: could not connect to host
 my-dick.ru: could not connect to host
 my-dns.co.il: could not connect to host
 my-floor.com: could not connect to host
 mycamda.com: could not connect to host
-mycareersfuture.sg: could not connect to host
 myfappening.org: could not connect to host
 myfunworld.de: could not connect to host
 mygreatjob.eu: could not connect to host
 mykeepsake.xyz: could not connect to host
-mykontool.de: could not connect to host
 myndcommunication.com: could not connect to host
 myonlinedating.club: could not connect to host
 myrig.io: could not connect to host
 myrig.net: could not connect to host
 mysterysear.ch: could not connect to host
 mytravelblog.de: could not connect to host
 mzlog.win: could not connect to host
 n0099.cf: could not connect to host
 naano.org: could not connect to host
 nadaquenosepas.com: could not connect to host
 nakedfacts.co.uk: could not connect to host
 namaleaks.com: could not connect to host
 namikawatetsuji.jp: could not connect to host
+nanderson.me: could not connect to host
 naphex.rocks: could not connect to host
 nasmocopati.com: could not connect to host
 nastysclaw.com: could not connect to host
+natanaelys.com: could not connect to host
 nataniel-perissier.fr: could not connect to host
 natur-udvar.hu: could not connect to host
-natureflo.net: could not connect to host
 natuterra.com.br: could not connect to host
-nayanaas.com: could not connect to host
 nc99.co: could not connect to host
 ncdesigns-studio.com: could not connect to host
 ndtblog.com: could not connect to host
 necesitodinero.org: could not connect to host
 necio.ca: could not connect to host
 neer.io: could not connect to host
 nekoku.io: could not connect to host
 nella-project.org: could not connect to host
@@ -1815,24 +1808,24 @@ nexusconnectinternational.eu: could not 
 nexuscorporation.in: could not connect to host
 nfluence.org: could not connect to host
 ngiemboon.net: could not connect to host
 nginxyii.tk: could not connect to host
 ngocuong.net: could not connect to host
 nienfun.com: could not connect to host
 nikklassen.ca: could not connect to host
 nikksno.io: could not connect to host
-niklas.pw: could not connect to host
 nikobradshaw.com: could not connect to host
 nikolasbradshaw.com: could not connect to host
 nimidam.com: could not connect to host
 ninofink.com: could not connect to host
 ninreiei.jp: could not connect to host
 niouininon.eu: could not connect to host
 nirada.info: could not connect to host
+nirjharstudio.com: could not connect to host
 nishikino-maki.com: could not connect to host
 nkadvertising.online: could not connect to host
 nodelab-it.de: could not connect to host
 nodeselect.com: could not connect to host
 noelblog.ga: could not connect to host
 noisebridge.social: could not connect to host
 nolimits.net.nz: could not connect to host
 nonemu.ninja: could not connect to host
@@ -1846,47 +1839,44 @@ notevencode.com: could not connect to ho
 novascan.net: could not connect to host
 novfishing.ru: could not connect to host
 nowremindme.com: could not connect to host
 nsbfalconacademy.org: could not connect to host
 nsdev.cn: could not connect to host
 nsmail.cn: could not connect to host
 nudel.ninja: could not connect to host
 nulltime.net: could not connect to host
-number.me: could not connect to host
 nyanpasu.tv: could not connect to host
 nyffo.com: could not connect to host
 oaksbloom.com: could not connect to host
 oasis-conference.org.nz: could not connect to host
 obdolbacca.ru: could not connect to host
 oberam.de: could not connect to host
 oberhof.co: could not connect to host
 observatory.se: could not connect to host
 ocapic.com: could not connect to host
 ocsr.nl: could not connect to host
 octo.im: could not connect to host
 oducs.org: could not connect to host
-ofcampuslausanne.ch: could not connect to host
 off-the-clock.us: could not connect to host
 offgames.pro: could not connect to host
 office-ruru.com: could not connect to host
 ohnemusik.com: could not connect to host
 oinky.ddns.net: could not connect to host
 oklahomamoversassociation.org: could not connect to host
 oklahomanotepro.com: could not connect to host
 oldandyounglesbians.us: could not connect to host
 oldtimer-trifft-flugplatz.de: could not connect to host
 oliverspringer.eu: could not connect to host
 oneazcu.com: could not connect to host
 onewebdev.info: could not connect to host
 onionsburg.com: could not connect to host
 onsennuie.fr: could not connect to host
 onsite4u.de: could not connect to host
 onstud.com: could not connect to host
-onthe.network: could not connect to host
 onwie.com: could not connect to host
 onwie.fr: could not connect to host
 ooeste.com: could not connect to host
 openclub24.ru: could not connect to host
 openconnect.com.au: could not connect to host
 opinion8td.com: could not connect to host
 opinionipannolini.it: could not connect to host
 orangekey.tk: could not connect to host
@@ -1901,19 +1891,19 @@ otinane.eu: could not connect to host
 ourchoice2016.com: could not connect to host
 overkillshop.com: could not connect to host
 ovpn.to: could not connect to host
 owensmith.website: could not connect to host
 owlscrap.ru: could not connect to host
 ownc.at: could not connect to host
 ownspec.com: could not connect to host
 oxynux.xyz: could not connect to host
+oyesunn.com: could not connect to host
 oyoony.de: could not connect to host
 pabloartea.ga: could not connect to host
-pachaiyappas.org: could not connect to host
 packetcrash.net: could not connect to host
 pacoda.de: could not connect to host
 pactf-flag-4boxdpa21ogonzkcrs9p.com: could not connect to host
 paichai.space: could not connect to host
 painosso.org: could not connect to host
 paio2-rec.com: could not connect to host
 paio2.com: could not connect to host
 palationtrade.com: could not connect to host
@@ -1935,17 +1925,16 @@ paypod.org: could not connect to host
 pbscreens.com: could not connect to host
 pbytes.com: could not connect to host
 pcvirusclear.com: could not connect to host
 pear2pear.de: could not connect to host
 peerless.ae: could not connect to host
 peirong.me: could not connect to host
 pemagrid.org: could not connect to host
 pengisatelier.net: could not connect to host
-peoplesguardian.org: could not connect to host
 persjrp.ca: could not connect to host
 persoform.ch: could not connect to host
 pesto.video: could not connect to host
 petlife.od.ua: could not connect to host
 peuf.shop: could not connect to host
 peykezamin.ir: could not connect to host
 pfolta.net: could not connect to host
 pgmann.cf: could not connect to host
@@ -1974,16 +1963,17 @@ pipenny.net: could not connect to host
 pirateahoy.eu: could not connect to host
 pixelgliders.de: could not connect to host
 plaasprodukte.com: could not connect to host
 placefade.com: could not connect to host
 planbox.info: could not connect to host
 playsharp.com: could not connect to host
 playsource.co: could not connect to host
 please-deny.me: could not connect to host
+pleaseuseansnisupportedbrowser.ml: could not connect to host
 plussizereviews.com: could not connect to host
 pmbremer.de: could not connect to host
 pmklaassen.com: could not connect to host
 pogs.us: could not connect to host
 pointworksacademy.com: could not connect to host
 polit-it.pro: could not connect to host
 polit.im: could not connect to host
 polymathematician.com: could not connect to host
@@ -2048,17 +2038,16 @@ prstatic.com: could not connect to host
 pruikshop.nl: could not connect to host
 prytkov.com: could not connect to host
 psicosalud.online: 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
-pstrozniak.com: could not connect to host
 psychoco.net: could not connect to host
 psyk.yt: could not connect to host
 pub-online.ro: could not connect to host
 publimepa.it: could not connect to host
 pugilares.com.pl: could not connect to host
 puhe.se: could not connect to host
 puikheid.nl: could not connect to host
 purrfectcams.com: could not connect to host
@@ -2112,20 +2101,19 @@ reeson.org: could not connect to host
 reevu.net: could not connect to host
 reflecton.io: could not connect to host
 refreshingserum.com: could not connect to host
 regalpaintingfdl.com: could not connect to host
 regendevices.eu: could not connect to host
 regio-salland.nl: could not connect to host
 regsec.com: could not connect to host
 reignsphere.net: could not connect to host
-reinout.nu: could not connect to host
-reinouthoornweg.nl: could not connect to host
 reismil.ch: could not connect to host
 relatic.net: could not connect to host
+remi-saurel.com: could not connect to host
 renemayrhofer.com: could not connect to host
 report-incident.de: could not connect to host
 reposaarenkuva.fi: could not connect to host
 reputationweaver.com: could not connect to host
 reqognize.com: could not connect to host
 resama.eu: could not connect to host
 research.md: could not connect to host
 resoundpro.ca: could not connect to host
@@ -2155,16 +2143,17 @@ rodehutskors.net: could not connect to h
 roelf.org: could not connect to host
 rolandszabo.com: could not connect to host
 romanticschemermovie.com: could not connect to host
 romanticvillas.com.au: could not connect to host
 rondreis-planner.nl: could not connect to host
 ronghexx.com: could not connect to host
 rool.me: could not connect to host
 roolevoi.ru: could not connect to host
+room2d.com: could not connect to host
 rootbsd.at: could not connect to host
 rospa100.com: could not connect to host
 rotterdamjazz.info: could not connect to host
 royzez.com: could not connect to host
 rozalynne-dawn.ga: could not connect to host
 rpasafrica.com: could not connect to host
 rs-devdemo.host: could not connect to host
 rsldb.com: could not connect to host
@@ -2172,99 +2161,96 @@ rtc.fun: could not connect to host
 rubbix.net: could not connect to host
 rubendv.be: could not connect to host
 ruflay.ru: could not connect to host
 ruhr3.de: could not connect to host
 rukhaiyar.com: could not connect to host
 run-forrest.run: could not connect to host
 runcarina.com: could not connect to host
 rundumcolumn.xyz: could not connect to host
+rushball.net: could not connect to host
 ruurdboomsma.nl: could not connect to host
 rzegroup.com: could not connect to host
 s0923.com: could not connect to host
 s16e.no: could not connect to host
 s3n.se: could not connect to host
 s44.eu: could not connect to host
 sadiejanehair.com: could not connect to host
 safedevice.net: could not connect to host
 saferedirectlink.com: could not connect to host
 sagemontchurch.org: could not connect to host
 saintw.com: could not connect to host
-saitrance.com: could not connect to host
 salaervergleich.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
 sammyjohnson.com: could not connect to host
 samsonova.de: could not connect to host
 sanael.net: could not connect to host
 sanatrans.com: could not connect to host
 santanderideas.com: could not connect to host
 sapuncheta.com: could not connect to host
 sarahlicity.me.uk: could not connect to host
 sarindia.com: could not connect to host
 sarindia.de: could not connect to host
 sarkisozleri.us: could not connect to host
 sarndipity.com: could not connect to host
-sashascollections.com: could not connect to host
 sativatunja.com: could not connect to host
 saunahats.eu: could not connect to host
 savecashindia.com: could not connect to host
 savethedogfishfoundation.org: could not connect to host
 savingbytes.com: could not connect to host
 saxol-group.com: could not connect to host
 sb.im: could not connect to host
 sbm.cloud: could not connect to host
 scalaire.fr: could not connect to host
 schaafenstrasse.koeln: could not connect to host
 schmidttulskie.de: could not connect to host
 schnapke.name: could not connect to host
-schorers.org: could not connect to host
 schul-bar.de: could not connect to host
 scib.tk: could not connect to host
 sciencemonster.co.uk: could not connect to host
 scintillating.stream: could not connect to host
 scitopia.me: could not connect to host
 scm-2017.org: could not connect to host
 scottainslie.me.uk: could not connect to host
 scriptgates.ru: could not connect to host
 scripthost.org: could not connect to host
 scriptjunkie.us: could not connect to host
 scruffymen.com: could not connect to host
 sctm.at: could not connect to host
 seanationals.org: could not connect to host
 seankilgarriff.com: could not connect to host
 searx.pw: could not connect to host
-sebastian-lutsch.de: could not connect to host
 sebi.cf: could not connect to host
 secitem.de: could not connect to host
 sectest.ml: could not connect to host
 secure-automotive-cloud.com: could not connect to host
 secure-automotive-cloud.org: could not connect to host
 secureindia.co: could not connect to host
 security.xn--q9jyb4c: could not connect to host
 securitymap.wiki: could not connect to host
 securitysoapbox.com: could not connect to host
 securitytalk.pl: could not connect to host
 securon.io: could not connect to host
 securoswiss.ch: could not connect to host
 seehimnaked.com: could not connect to host
 seehisnudes.com: could not connect to host
 seen.life: could not connect to host
-segulink.com: could not connect to host
+sefru.de: could not connect to host
 selco-himejiminami.com: could not connect to host
 selent.me: could not connect to host
-seleondar.ru: could not connect to host
 selfhosters.com: could not connect to host
 selfmade4u.de: could not connect to host
 selfserverx.com: could not connect to host
 sellmoretires.com: could not connect to host
 sementes.gratis: could not connect to host
 seomen.biz: could not connect to host
 seoscribe.net: could not connect to host
+septs.pw: could not connect to host
 servecrypt.com: could not connect to host
 servecrypt.ru: could not connect to host
 server.pk: could not connect to host
 serverlauget.no: could not connect to host
 servfefe.com: could not connect to host
 seryovpn.com: could not connect to host
 sesha.co.za: could not connect to host
 sexshopfacil.com.br: could not connect to host
@@ -2323,36 +2309,37 @@ sky-aroma.com: could not connect to host
 skylocker.net: could not connect to host
 skylocker.nl: could not connect to host
 skyvault.io: could not connect to host
 slaps.be: could not connect to host
 slash64.co.uk: could not connect to host
 slash64.uk: could not connect to host
 slatemc.fun: could not connect to host
 sliceone.com: could not connect to host
+slowb.ro: could not connect to host
 slytech.ch: could not connect to host
 smallchat.nl: could not connect to host
 smartbiz.vn: could not connect to host
 smdavis.us: could not connect to host
 smith.is: could not connect to host
 sml.lc: could not connect to host
 smuhelper.cn: could not connect to host
 sneed.company: could not connect to host
-snerith.com: could not connect to host
 snowdy.eu: could not connect to host
 soboleva-pr.com.ua: could not connect to host
 soci.ml: 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
 soe-server.com: could not connect to host
 sogravatas.net.br: could not connect to host
 sojingle.net: could not connect to host
+solus-project.com: could not connect to host
 solymar.co: could not connect to host
 sonafe.info: could not connect to host
 sonja-kowa.de: could not connect to host
 sorenam.com: could not connect to host
 sortaweird.net: could not connect to host
 sotiran.com: could not connect to host
 sourcecode.love: could not connect to host
 sowingseasons.com: could not connect to host
@@ -2389,33 +2376,35 @@ startupum.ru: could not connect to host
 state-of-body-and-mind.com: could not connect to host
 statgram.me: could not connect to host
 static-assets.io: could not connect to host
 static.hosting: could not connect to host
 staticisnoise.com: could not connect to host
 statusbot.io: could not connect to host
 staxflax.tk: could not connect to host
 steelrhino.co: could not connect to host
-stefanovski.io: could not connect to host
 steffi-in-australien.com: could not connect to host
 stevengoodpaster.com: could not connect to host
 stickswag.cf: could not connect to host
 stiger.me: could not connect to host
+stikonas.eu: could not connect to host
 stilettomoda.com.br: could not connect to host
 stoianlawfirm.com: could not connect to host
 stonefusion.org.uk: could not connect to host
 stonemanbrasil.com.br: could not connect to host
 stopakwardhandshakes.org: could not connect to host
 store10.de: could not connect to host
 stormwatcher.org: could not connect to host
 stpip.com: could not connect to host
+streamdesk.ca: could not connect to host
 streams.dyndns.org: could not connect to host
 stressfreehousehold.com: could not connect to host
 stylle.me: could not connect to host
 subrain.com: could not connect to host
+succubus.network: could not connect to host
 sudo.im: could not connect to host
 sudosu.fr: could not connect to host
 sugartownfarm.com: could not connect to host
 suitocracy.com: could not connect to host
 summer.ga: could not connect to host
 sunbritetv.com: could not connect to host
 suneilpatel.com: could not connect to host
 sunfireshop.com.br: could not connect to host
@@ -2441,33 +2430,33 @@ swissentreprises.ch: could not connect t
 sx3.no: could not connect to host
 syhost.at: could not connect to host
 syncaddict.net: could not connect to host
 syncmylife.net: could not connect to host
 synergisticsoccer.com: could not connect to host
 sysert.tv: could not connect to host
 systea.fr: could not connect to host
 systea.net: could not connect to host
+system.is: could not connect to host
 system12.pl: could not connect to host
 t-stonegroup.com: could not connect to host
 t3rror.net: could not connect to host
 tab.watch: could not connect to host
 tabla-periodica.com: could not connect to host
 tacoma-games.com: could not connect to host
 taidu.news: could not connect to host
 takedownthissite.com: could not connect to host
 takusan.ru: could not connect to host
 talado.gr: could not connect to host
 tangerine.ga: could not connect to host
 tangzhao.net: could not connect to host
 tapestries.tk: could not connect to host
 taranis.re: could not connect to host
 tarantul.org.ua: could not connect to host
 tarek.link: could not connect to host
-taxmadras.com: could not connect to host
 tazemama.biz: could not connect to host
 tcpweb.net: 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
 teacherph.net: could not connect to host
 team-pancake.eu: could not connect to host
@@ -2478,23 +2467,21 @@ technoinfogroup.it: could not connect to
 techunit.org: could not connect to host
 tehplace.club: could not connect to host
 teknogeek.id: could not connect to host
 tektoria.de: could not connect to host
 telekollektiv.org: could not connect to host
 tempus-aquilae.de: could not connect to host
 tengu.cloud: could not connect to host
 tenispopular.com: could not connect to host
-tequilazor.com: could not connect to host
 terlindung.com: could not connect to host
 terminalvelocity.co.nz: could not connect to host
 terra-x.net: could not connect to host
 terrax.net: could not connect to host
 testadron.com: could not connect to host
-testbawks.com: could not connect to host
 testbirds.cz: could not connect to host
 testbirds.sk: could not connect to host
 testovaci.ml: could not connect to host
 tgod.co: could not connect to host
 tgtv.tn: could not connect to host
 thackbarth.net: could not connect to host
 thaigirls.xyz: could not connect to host
 thatgudstuff.com: could not connect to host
@@ -2503,16 +2490,17 @@ the-finance-blog.com: could not connect 
 the-gist.io: could not connect to host
 thebte.com: could not connect to host
 thebuffalotavern.com: could not connect to host
 thedailyupvote.com: could not connect to host
 theeducationchannel.info: could not connect to host
 theepankar.com: could not connect to host
 thefox.co: could not connect to host
 thefrk.xyz: could not connect to host
+thelefthand.org: could not connect to host
 thelinuxspace.com: could not connect to host
 thelostyankee.com: could not connect to host
 themilanlife.com: could not connect to host
 thenrdhrd.nl: could not connect to host
 theoverfly.co: could not connect to host
 theposhfudgecompany.co.uk: could not connect to host
 theprincegame.com: could not connect to host
 theprivacysolution.com: could not connect to host
@@ -2534,22 +2522,22 @@ timer.fit: could not connect to host
 timestamp.uk: could not connect to host
 timetech.io: could not connect to host
 timtelfer.com: could not connect to host
 tink.network: could not connect to host
 tippspiel.cc: could not connect to host
 tjs.me: could not connect to host
 tmin.cf: could not connect to host
 tnb-plattform.de: could not connect to host
+tobyx.is: could not connect to host
 todosrv.com: could not connect to host
 tofa-koeln.de: could not connect to host
 tokoindo.top: could not connect to host
 tollsjekk.no: could not connect to host
 tomharling.co.uk: could not connect to host
-toolkits.design: could not connect to host
 top10mountainbikes.info: could not connect to host
 topanlage.de: could not connect to host
 topdetoxcleanse.com: could not connect to host
 topnotchendings.com: could not connect to host
 tor2web.org: could not connect to host
 toretfaction.net: could not connect to host
 totallynotaserver.com: could not connect to host
 totch.de: could not connect to host
@@ -2599,31 +2587,32 @@ twotube.ie: could not connect to host
 twuni.org: could not connect to host
 tykoon.com: could not connect to host
 tylerharcourt.ca: could not connect to host
 tylerharcourt.com: could not connect to host
 tylerharcourt.net: could not connect to host
 tylerharcourt.org: could not connect to host
 tysye.ca: could not connect to host
 tzwe.com: could not connect to host
+uberwald.de: could not connect to host
 ubicv.com: could not connect to host
 ueba1085.jp: could not connect to host
 uesociedadlimitada.com: could not connect to host
 ueu.me: could not connect to host
 ugcdn.com: could not connect to host
 ulalau.com: could not connect to host
 unefuite.ch: could not connect to host
 unhu.fr: could not connect to host
 uni2share.com: could not connect to host
 unicorn.li: could not connect to host
+unleash.pw: could not connect to host
 uploadbro.com: could not connect to host
 upmchealthsecurity.us: could not connect to host
 upr.com.ua: could not connect to host
 uptogood.org: could not connect to host
-urbansparrow.in: could not connect to host
 urcentral.org: could not connect to host
 uscp8.com: could not connect to host
 usportsgo.com: could not connect to host
 uwac.co.uk: 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 116"  data: no]
 uwimonacs.org.jm: could not connect to host
 uygindir.ml: could not connect to host
 vaaddress.co: could not connect to host
@@ -2634,63 +2623,62 @@ valenhub.com: could not connect to host
 valenhub.es: could not connect to host
 valis.sx: could not connect to host
 vamosfalardesaude.pt: could not connect to host
 vanderstraeten.dynv6.net: could not connect to host
 vanessabalibridal.com: could not connect to host
 vapemania.eu: could not connect to host
 varela-electricite.fr: could not connect to host
 variablyconstant.com: could not connect to host
-vavouchers.com: could not connect to host
 vayaport.com: could not connect to host
 vconcept.ch: could not connect to host
 vconcept.me: could not connect to host
 vdanker.net: could not connect to host
+vdrpro.com: could not connect to host
 vectro.me: could not connect to host
 vekenz.com: could not connect to host
 velasense.com: could not connect to host
 velen.io: could not connect to host
 venicecomputerrepair.com: could not connect to host
 venicefloridawebsitedesign.com: could not connect to host
 venturavwparts.com: could not connect to host
 verdeandco.co.uk: 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
 vicenage.com: could not connect to host
 viciousviscosity.xyz: could not connect to host
 videorullen.se: could not connect to host
-vijay-international.com: could not connect to host
 vikasbabyworld.de: could not connect to host
 viladochurrasco.com.br: could not connect to host
 vilaydin.com: could not connect to host
 villainsclothing.com.au: could not connect to host
 villasenor.online: could not connect to host
 vimeosucks.nyc: could not connect to host
 vinesauce.info: could not connect to host
 vinetalk.net: could not connect to host
 vipnettikasinoklubi.com: could not connect to host
 visiongamestudios.com: could not connect to host
 visionthroughknowledge.com: could not connect to host
 visiontree-beta.eu: could not connect to host
 visiontree.eu: could not connect to host
-visudira.com: could not connect to host
 vitalamin.at: could not connect to host
 vitalamin.ch: could not connect to host
 vkino.com: could not connect to host
 vldkn.net: could not connect to host
 vleij.family: could not connect to host
 vlogge.com: could not connect to host
 vlvvl.com: could not connect to host
 vmgirls.com: could not connect to host
 vocab.guru: could not connect to host
 voeux.io: could not connect to host
 vogt.tech: could not connect to host
 voipkb.com: could not connect to host
 volcain.io: could not connect to host
+voltimax.com: could not connect to host
 vorderklier.de: could not connect to host
 votocek.cz: could not connect to host
 votockova.cz: could not connect to host
 votresiteweb.ch: could not connect to host
 vow.vn: could not connect to host
 vrtak-cz.net: could not connect to host
 vrzl.pro: could not connect to host
 vsesrazu-raiffeisen.ru: could not connect to host
@@ -2767,42 +2755,42 @@ windholz.us: could not connect to host
 windwoodmedia.com: could not connect to host
 windwoodweb.com: could not connect to host
 winnersports.co: could not connect to host
 winsufi.biz: could not connect to host
 wisak.eu: could not connect to host
 wisdomize.me: could not connect to host
 wishesbee.com: could not connect to host
 wissl.org: could not connect to host
-witae.com: could not connect to host
 wizznab.tk: could not connect to host
 wk577.com: could not connect to host
 wlsme.org: could not connect to host
 wokeai.net: could not connect to host
 wolfemg.com: could not connect to host
-wolfram.io: could not connect to host
 wolfwings.us: could not connect to host
 wonderbooks.club: could not connect to host
 woomu.me: could not connect to host
 wordsofamaster.com: could not connect to host
 worf.in: could not connect to host
 workemy.com: could not connect to host
 workwithgo.com: could not connect to host
 world-education-association.org: could not connect to host
 worldfree4.org: could not connect to host
 worldsoccerclips.com: could not connect to host
 wormholevpn.net: could not connect to host
+wow-foederation.de: could not connect to host
 wp-fastsearch.de: could not connect to host
 wp-stack.pro: could not connect to host
 wp6.pw: could not connect to host
 wriedts.de: could not connect to host
 wsb-immo.at: could not connect to host
 wsdcap.com: could not connect to host
 wuchipc.com: could not connect to host
 wumbo.kiwi: could not connect to host
+wvw-8522.com: could not connect to host
 wwjd.dynu.net: could not connect to host
 www-68277.com: could not connect to host
 www-8887999.com: could not connect to host
 www.history.pe: could not connect to host
 www.simbolo.co.uk: could not connect to host
 wyzwaniemilosci.com: could not connect to host
 xbc.nz: could not connect to host
 xeonlab.com: could not connect to host
@@ -2817,16 +2805,17 @@ xmiui.com: could not connect to host
 xn----7sbmucgqdbgwwc5e9b.xn--p1ai: could not connect to host
 xn--6x6a.life: could not connect to host
 xn--8mr166hf6s.xn--fiqs8s: could not connect to host
 xn--98jm6m.jp: could not connect to host
 xn--c5w27q.ml: could not connect to host
 xn--gmq92k.nagoya: could not connect to host
 xn--grnderlehrstuhl-0vb.de: could not connect to host
 xn--hfk-allgu-schwaben-stb.de: could not connect to host
+xn--rlcus7b3d.xn--xkc2dl3a5ee0h: could not connect to host
 xn--rtter-kva.eu: could not connect to host
 xn--srenpind-54a.dk: could not connect to host
 xn--t8j2a3042d.xyz: could not connect to host
 xn--tda.ml: could not connect to host
 xn--thorme-6uaf.ca: could not connect to host
 xn--u9jy16ncfao19mo8i.nagoya: could not connect to host
 xn--vck8crc010pu14e.biz: could not connect to host
 xn--vck8crcu789ajtaj92eura.xyz: could not connect to host
@@ -2838,16 +2827,17 @@ xn--yj8h0m.ws: could not connect to host
 xn--ykrp42k.com: could not connect to host
 xombra.com: could not connect to host
 xpwn.cz: could not connect to host
 xtom.io: could not connect to host
 xtzone.be: could not connect to host
 xuntaosms.com: could not connect to host
 xwaretech.info: could not connect to host
 xy1919.com: could not connect to host
+xzoneadventure.com: could not connect to host
 y3451.com: could not connect to host
 yabrt.cn: could not connect to host
 yahoo.ax: could not connect to host
 yarchives.jp: could not connect to host
 yaucy.win: could not connect to host
 yawen.tw: could not connect to host
 ybresson.com: could not connect to host
 yd.io: could not connect to host
@@ -2857,77 +2847,76 @@ yemekbaz.az: could not connect to host
 yepbitcoin.com: could not connect to host
 yesfone.com.br: could not connect to host
 yggdar.ga: could not connect to host
 yhori.xyz: could not connect to host
 yibin0831.com: could not connect to host
 ying299.com: could not connect to host
 ying299.net: could not connect to host
 yinga.ga: could not connect to host
-yiz96.com: could not connect to host
 ylk.io: could not connect to host
 yobbelwobbel.de: could not connect to host
 yobst.tk: could not connect to host
 yoga.is-an-engineer.com: could not connect to host
 yolo-csgo.com: could not connect to host
 yoticonnections.com: could not connect to host
 yotilabs.com: could not connect to host
 yourself.today: could not connect to host
 yourznc.com: could not connect to host
 yousite.by: could not connect to host
 yude.ml: could not connect to host
 yugege.cf: could not connect to host
 yum.beer: could not connect to host
 yum0.cn: could not connect to host
+yurinet.org: could not connect to host
 yux.fr: could not connect to host
 z-coder.com: could not connect to host
 z0rro.net: could not connect to host
 zachbolinger.com: could not connect to host
 zaem.tv: could not connect to host
 zahyantechnologies.com: could not connect to host
 zaoext.com: could not connect to host
 zbchen.com: could not connect to host
 zbp.at: could not connect to host
 zby.io: could not connect to host
 zehdenick-bleibt-bunt.de: could not connect to host
 zeloz.xyz: could not connect to host
+zenghx.tk: could not connect to host
 zero-x-baadf00d.com: could not connect to host
 zerocool.io: could not connect to host
 zerosource.net: could not connect to host
-zgrep.org: could not connect to host
 zhangfangzhou.com: could not connect to host
 zhangsir.net: could not connect to host
 zhaochen.xyz: could not connect to host
 zhenmeish.com: could not connect to host
 zhikin.com: could not connect to host
 zhoujiashu.com: could not connect to host
 zikirakhirzaman.com: could not connect to host
 zixo.sk: could not connect to host
 znd.jp: could not connect to host
 zobraz.cz: could not connect to host
-zofrex.com: could not connect to host
 zohar.shop: could not connect to host
 zokster.net: could not connect to host
 zoological-gardens.eu: could not connect to host
 zudomc.me: could not connect to host
 zuehlcke.de: could not connect to host
 zukix.com: could not connect to host
 zuviel.space: could not connect to host
 zxity.ltd: could not connect to host
 zypr.pw: could not connect to host
 zyx.im: could not connect to host
 zzw.ca: could not connect to host
-00001.am: max-age too low: 3600
-00002.am: max-age too low: 3600
+00001.am: max-age too low: 129600
+00002.am: max-age too low: 129600
 0005.com: could not connect to host
 0005aa.com: could not connect to host
 007sascha.de: did not receive HSTS header
 016298.com: 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 116"  data: no]
-0222aa.com: could not connect to host
+0222aa.com: did not receive HSTS header
 023838.com: did not receive HSTS header
 02dl.net: did not receive HSTS header
 040fit.nl: did not receive HSTS header
 048.ag: could not connect to host
 050508.com: could not connect to host
 066718.com: did not receive HSTS header
 066928.com: could not connect to host
 066938.com: could not connect to host
@@ -2999,24 +2988,22 @@ 24sihu.com: could not connect to host
 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: did not receive HSTS header
 300651.ru: did not receive HSTS header
 300mbmovie24.com: could not connect to host
 300mbmovies4u.cc: could not connect to host
 301.website: could not connect to host
 302.nyc: could not connect to host
-30yearmortgagerates.net: did not receive HSTS header
 314166.com: could not connect to host
 314chan.org: did not receive HSTS header
 32ph.com: could not connect to host
 33836.com: did not receive HSTS header
 33drugstore.com: did not receive HSTS header
 341.mg: could not connect to host
 3555aa.com: could not connect to host
 35792.de: could not connect to host
@@ -3053,26 +3040,26 @@ 4ourty2.org: could not connect to host
 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
 518maicai.com: did not receive HSTS header
 540.co: did not receive HSTS header
 5432.cc: did not receive HSTS header
 54bf.com: could not connect to host
-555fl.com: max-age too low: 3600
+555fl.com: max-age too low: 129600
 56ct.com: could not connect to host
 57aromas.com: did not receive HSTS header
 5piecesofadvice.com: could not connect to host
 605508.cc: could not connect to host
 605508.com: could not connect to host
 60ych.net: did not receive HSTS header
 6120.eu: did not receive HSTS header
 64616e.xyz: could not connect to host
-660011.com: could not connect to host
+660011.com: max-age too low: 0
 69square.com: could not connect to host
 721av.com: max-age too low: 2592000
 7777av.co: could not connect to host
 7f-wgg.cf: could not connect to host
 7kovrikov.ru: did not receive HSTS header
 7thheavenrestaurant.com: could not connect to host
 8.net.co: could not connect to host
 808.lv: did not receive HSTS header
@@ -3172,16 +3159,17 @@ adajwells.me: could not connect to host
 adambryant.ca: could not connect to host
 adamricheimer.com: could not connect to host
 adamwk.com: did not receive HSTS header
 adastra.re: could not connect to host
 adboos.com: could not connect to host
 addaxpetroleum.com: could not connect to host
 addcrazy.com: did not receive HSTS header
 addvocate.com: could not connect to host
+adelaides.com: did not receive HSTS header
 adelevie.com: could not connect to host
 adelinlydia-coach.com: did not receive HSTS header
 adequatetechnology.com: could not connect to host
 aderal.io: could not connect to host
 adesa-asesoria.com: did not receive HSTS header
 adfa-1.com: could not connect to host
 adhigamindia.com: did not receive HSTS header
 adhosting.nl: did not receive HSTS header
@@ -3372,16 +3360,17 @@ amitse.com: did not receive HSTS header
 amitube.com: did not receive HSTS header
 amlvfs.net: could not connect to host
 ammoulianiapartments.com: did not receive HSTS header
 amo-entreprise-et-commerce.fr: could not connect to host
 amoory.com: could not connect to host
 amorimendes.com.br: could not connect to host
 amri.nl: did not receive HSTS header
 anabol.nl: could not connect to host
+anacreon.de: did not receive HSTS header
 anacruz.es: did not receive HSTS header
 anadoluefessporkulubu.org: could not connect to host
 anagra.ms: could not connect to host
 analytic-s.ml: could not connect to host
 analyticsinmotion.net: could not connect to host
 anchorinmarinainc.com: did not receive HSTS header
 ancientkarma.com: could not connect to host
 andere-gedanken.net: max-age too low: 10
@@ -3412,17 +3401,17 @@ andyuk.org: could not connect to host
 anfsanchezo.co: could not connect to host
 anfsanchezo.me: could not connect to host
 angeloroberto.ch: did not receive HSTS header
 anghami.com: did not receive HSTS header
 anglesya.win: did not receive HSTS header
 anglictinatabor.cz: could not connect to host
 angryroute.com: could not connect to host
 animal-nature-human.com: did not receive HSTS header
-animalnet.de: max-age too low: 7776000
+animalnet.de: could not connect to host
 anime1video.tk: could not connect to host
 animeday.ml: could not connect to host
 animesfusion.com.br: could not connect to host
 animurecs.com: could not connect to host
 aniplus.cf: could not connect to host
 aniplus.gq: could not connect to host
 aniplus.ml: could not connect to host
 anisekai.com: max-age too low: 2592000
@@ -3570,16 +3559,17 @@ asdpress.cn: could not connect to host
 asepms.com: max-age too low: 7776000
 ashlane-cottages.com: could not connect to host
 ashleymedway.com: did not receive HSTS header
 asianodor.com: could not connect to host
 ask.pe: did not receive HSTS header
 askfit.cz: did not receive HSTS header
 asmui.ga: could not connect to host
 asmui.ml: could not connect to host
+aspcl.ch: did not receive HSTS header
 ass.org.au: could not connect to host
 assekuranzjobs.de: could not connect to host
 asset-alive.com: did not receive HSTS header
 asset-alive.net: did not receive HSTS header
 assurancesmons.be: did not receive HSTS header
 astraalivankila.net: did not receive HSTS header
 astral.gq: did not receive HSTS header
 astrolpost.com: could not connect to host
@@ -3647,17 +3637,16 @@ autosiero.nl: did not receive HSTS heade
 autotsum.com: could not connect to host
 autoxy.it: did not receive HSTS header
 autumnwindsagility.com: could not connect to host
 auverbox.ovh: could not connect to host
 auvious.com: did not receive HSTS header
 auxetek.se: could not connect to host
 auxiliumincrementum.co.uk: could not connect to host
 av.de: did not receive HSTS header
-avadatravel.com: did not receive HSTS header
 avantmfg.com: did not receive HSTS header
 avastantivirus.ro: did not receive HSTS header
 avec-ou-sans-ordonnance.fr: could not connect to host
 aveling-adventure.co.uk: did not receive HSTS header
 avepol.cz: did not receive HSTS header
 avepol.eu: did not receive HSTS header
 avg.club: did not receive HSTS header
 aviacao.pt: did not receive HSTS header
@@ -3666,16 +3655,17 @@ aviodeals.com: could not connect to host
 avtosept.by: did not receive HSTS header
 avus-automobile.com: did not receive HSTS header
 awanderlustadventure.com: did not receive HSTS header
 awg-mode.de: did not receive HSTS header
 aww.moe: did not receive HSTS header
 axado.com.br: did not receive HSTS header
 axelchv.fr: did not receive HSTS header
 axeny.com: did not receive HSTS header
+axiumacademy.com: did not receive HSTS header
 axolsoft.com: max-age too low: 10540800
 ayahuascaadvisor.com: could not connect to host
 aymerick.fr: did not receive HSTS header
 ayor.jp: could not connect to host
 ayor.tech: could not connect to host
 ayuru.info: could not connect to host
 azamra.com: did not receive HSTS header
 azazy.net: max-age too low: 2592000
@@ -3798,17 +3788,17 @@ bebesurdoue.com: could not connect to ho
 bedabox.com: did not receive HSTS header
 bedeta.de: could not connect to host
 bedreid.dk: did not receive HSTS header
 bedrijvenadministratie.nl: could not connect to host
 beerboutique.com.br: could not connect to host
 beetleroadstories.com: could not connect to host
 befundup.com: could not connect to host
 behere.be: could not connect to host
-beier.io: did not receive HSTS header
+beier.io: could not connect to host
 beikeil.de: max-age too low: 86400
 beingmad.org: did not receive HSTS header
 belairsewvac.com: could not connect to host
 belewpictures.com: could not connect to host
 belgien.guide: could not connect to host
 belize-firmengruendung.com: could not connect to host
 belliash.eu.org: did not receive HSTS header
 belltower.io: could not connect to host
@@ -3935,29 +3925,46 @@ bitcoinworld.me: did not receive HSTS he
 bitconcepts.co.uk: could not connect to host
 biteoftech.com: did not receive HSTS header
 bitf.ly: could not connect to host
 bitfactory.ws: could not connect to host
 bitfarm-archiv.com: did not receive HSTS header
 bitfarm-archiv.de: did not receive HSTS header
 bitheus.com: could not connect to host
 bithosting.io: did not receive HSTS header
-bitmon.net: did not receive HSTS header
 bitnet.io: did not receive HSTS header
 bitrage.de: could not connect to host
 bitraum.io: could not connect to host
 bitsafe.systems: did not receive HSTS header
 bitvigor.com: could not connect to host
 bivsi.com: could not connect to host
 bizcms.com: did not receive HSTS header
 bizon.sk: did not receive HSTS header
 bizpare.com: did not receive HSTS header
 bizzartech.com: did not receive HSTS header
 bizzybeebouncers.co.uk: did not receive HSTS header
 bkb-skandal.ch: could not connect to host
+blablacar.co.uk: did not receive HSTS header
+blablacar.com: did not receive HSTS header
+blablacar.com.tr: did not receive HSTS header
+blablacar.com.ua: did not receive HSTS header
+blablacar.de: did not receive HSTS header
+blablacar.es: did not receive HSTS header
+blablacar.fr: did not receive HSTS header
+blablacar.hr: did not receive HSTS header
+blablacar.hu: did not receive HSTS header
+blablacar.in: did not receive HSTS header
+blablacar.it: did not receive HSTS header
+blablacar.mx: did not receive HSTS header
+blablacar.nl: did not receive HSTS header
+blablacar.pl: did not receive HSTS header
+blablacar.pt: did not receive HSTS header
+blablacar.ro: did not receive HSTS header
+blablacar.rs: did not receive HSTS header
+blablacar.ru: did not receive HSTS header
 black-armada.com: could not connect to host
 black-armada.com.pl: could not connect to host
 black-armada.pl: could not connect to host
 black-octopus.ru: could not connect to host
 blackburn.link: could not connect to host
 blacklane.com: did not receive HSTS header
 blackly.uk: max-age too low: 0
 blackmonday.gr: did not receive HSTS header
@@ -4186,17 +4193,18 @@ buybaby.eu: could not connect to host
 buyfox.de: did not receive HSTS header
 buynowdepot.com: did not receive HSTS header
 buzzconcert.com: did not receive HSTS header
 buzztelco.com.au: did not receive HSTS header
 bw81.xyz: could not connect to host
 bwear4all.de: could not connect to host
 bx-web.com: did not receive HSTS header
 by4cqb.cn: could not connect to host
-by77.com: did not receive HSTS header
+by77.com: could not connect to host
+by777.com: did not receive HSTS header
 bydisk.com: could not connect to host
 bynumlaw.net: did not receive HSTS header
 bypassed.bid: could not connect to host
 bypassed.cc: could not connect to host
 bypassed.club: could not connect to host
 bypassed.date: could not connect to host
 bypassed.download: could not connect to host
 bypassed.faith: could not connect to host
@@ -4285,17 +4293,17 @@ cardoni.net: did not receive HSTS header
 cardstream.com: did not receive HSTS header
 cardurl.com: did not receive HSTS header
 careerstuds.com: could not connect to host
 caringladies.org: could not connect to host
 carlo.mx: did not receive HSTS header
 carlolly.co.uk: could not connect to host
 carlosalves.info: could not connect to host
 carlsbouncycastlesandhottubs.co.uk: did not receive HSTS header
-carpliyz.com: could not connect to host
+carpliyz.com: did not receive HSTS header
 carroarmato0.be: did not receive HSTS header
 carsforbackpackers.com: could not connect to host
 carstenfeuls.de: did not receive HSTS header
 cartesunicef.be: did not receive HSTS header
 carwashvapeur.be: could not connect to host
 casajardininsecticidas.com: did not receive HSTS header
 casamorelli.com.br: did not receive HSTS header
 casashopp.com.br: could not connect to host
@@ -4303,16 +4311,17 @@ casc.cz: did not receive HSTS header
 casedi.org: max-age too low: 0
 casefall.com: could not connect to host
 cash-pos.com: could not connect to host
 cashless.fr: did not receive HSTS header
 cashmyphone.ch: could not connect to host
 casinolegal.pt: did not receive HSTS header
 casinostest.com: could not connect to host
 casioshop.eu: did not receive HSTS header
+casjay.us: did not receive HSTS header
 casovi.cf: could not connect to host
 castagnonavocats.com: did not receive HSTS header
 cata.ga: could not connect to host
 catalin.pw: could not connect to host
 catarsisvr.com: could not connect to host
 catchers.cc: did not receive HSTS header
 catinmay.com: did not receive HSTS header
 catnapstudios.com: could not connect to host
@@ -4382,24 +4391,25 @@ charityclear.com: did not receive HSTS h
 charitystreet.co.uk: could not connect to host
 charlestonsecuritysystems.net: did not receive HSTS header
 charliemcneive.com: could not connect to host
 charlimarie.com: did not receive HSTS header
 charlipopkids.com.au: could not connect to host
 charnleyhouse.co.uk: did not receive HSTS header
 charp.eu: could not connect to host
 chartstoffarm.de: max-age too low: 10
-chaska.co.za: could not connect to host
+chaska.co.za: did not receive HSTS header
 chat-porc.eu: did not receive HSTS header
 chatbot.me: did not receive HSTS header
 chateauconstellation.ch: did not receive HSTS header
 chatup.cf: could not connect to host
 chaulootz.com: did not receive HSTS header
 chcemvediet.sk: max-age too low: 1555200
 cheapdns.org: could not connect to host
+cheapestgamecards.com: did not receive HSTS header
 cheazey.net: did not receive HSTS header
 chebedara.com: could not connect to host
 cheekylittlerascals.co.uk: did not receive HSTS header
 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
@@ -4549,17 +4559,17 @@ cmscafe.ru: did not receive HSTS header
 cmso-cal.com: could not connect to host
 cncn.us: could not connect to host
 cnrd.me: did not receive HSTS header
 co-driversphoto.se: could not connect to host
 coach-sportif.paris: did not receive HSTS header
 coachingconsultancy.com: did not receive HSTS header
 cobrax.net: could not connect to host
 coccolebenessere.it: did not receive HSTS header
-cocker.cc: max-age too low: 7776000
+cocker.cc: could not connect to host
 cocktailfuture.fr: could not connect to host
 cocolovesdaddy.com: could not connect to host
 codabix.com: did not receive HSTS header
 codabix.de: could not connect to host
 codabix.net: could not connect to host
 code-35.com: could not connect to host
 code-digsite.com: could not connect to host
 code-judge.tk: could not connect to host
@@ -4623,17 +4633,16 @@ compalytics.com: could not connect to ho
 comparamejor.com: did not receive HSTS header
 compareandrecycle.co.uk: 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
 completesportperformance.com: did not receive HSTS header
 completionist.audio: could not connect to host
-completionist.me: did not receive HSTS header
 complymd.com: did not receive HSTS header
 compucorner.com.mx: could not connect to host
 computertal.de: could not connect to host
 comyuno.com: did not receive HSTS header
 concentrade.de: did not receive HSTS header
 concerts-metal.ch: did not receive HSTS header
 concord-group.co.jp: did not receive HSTS header
 concretehermit.com: did not receive HSTS header
@@ -4647,17 +4656,17 @@ connectingconcepts.com: did not receive 
 conrail.blue: did not receive HSTS header
 consciousandglamorous.com: could not connect to host
 consciousbrand.org.au: could not connect to host
 consciousbranding.org.au: could not connect to host
 consciousbrands.net.au: could not connect to host
 consejosdehogar.com: did not receive HSTS header
 console.python.org: did not receive HSTS header
 console.support: did not receive HSTS header
-consultorcr.net: did not receive HSTS header
+consultorcr.net: could not connect to host
 consumer.gov: did not receive HSTS header
 consumidor.gov: did not receive HSTS header
 contactbig.com: 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
 content-design.de: did not receive HSTS header
@@ -4667,16 +4676,17 @@ controleer-maar-een-ander.nl: did not re
 convergemagazine.com: did not receive HSTS header
 convert.zone: did not receive HSTS header
 cooink.net: could not connect to host
 coolaj86.com: did not receive HSTS header
 coolbutbroken.com: did not receive HSTS header
 coolchevy.org.ua: did not receive HSTS header
 coole-meister.de: could not connect to host
 coolkidsbouncycastles.co.uk: did not receive HSTS header
+coolvox.com: did not receive HSTS header
 coonelnel.net: did not receive HSTS header
 cooxa.com: did not receive HSTS header
 copshop.com.br: could not connect to host
 cor-ser.es: could not connect to host
 coralproject.net: did not receive HSTS header
 coralrosado.com.br: did not receive HSTS header
 coramcdaniel.com: did not receive HSTS header
 corderoscleaning.com: did not receive HSTS header
@@ -5007,34 +5017,33 @@ designgraphic.fr: did not receive HSTS h
 designthinking.or.jp: did not receive HSTS header
 desserteagleselvenar.tk: could not connect to host
 destinationbijoux.fr: could not connect to host
 destom.be: could not connect to host
 detechnologiecooperatie.nl: did not receive HSTS header
 detector.exposed: could not connect to host
 detest.org: could not connect to host
 detteflies.com: max-age too low: 7889238
-detutorial.com: could not connect to host
+detutorial.com: max-age too low: 36000
 deuxvia.com: could not connect to host
 dev-aegon.azurewebsites.net: did not receive HSTS header
 dev-bluep.pantheonsite.io: did not receive HSTS header
 dev-talk.eu: did not receive HSTS header
 develop.fitness: could not connect to host
 devincrow.me: could not connect to host
 devisonline.ch: could not connect to host
 devistravaux.org: did not receive HSTS header
 devlux.ch: did not receive HSTS header
 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
 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: did not receive HSTS header
 dfviana.com.br: max-age too low: 2592000
 dhaynes.xyz: max-age too low: 2592000
 dhpcs.com: did not receive HSTS header
 dhpiggott.net: did not receive HSTS header
 diablotine.rocks: could not connect to host
 diagnosia.com: did not receive HSTS header
@@ -5080,32 +5089,32 @@ dingcc.me: could not connect to host
 dingcc.org: did not receive HSTS header
 dingcc.xyz: could not connect to host
 dinkum.online: could not connect to host
 dino.li: max-age too low: 172800
 dipconsultants.com: could not connect to host
 direct2uk.com: did not receive HSTS header
 directhskincream.com: could not connect to host
 directorinegocis.cat: could not connect to host
-directtwosolutions.org: did not receive HSTS header
 direnv.net: did not receive HSTS header
 dirk-weise.de: did not receive HSTS header
 discovery.lookout.com: did not receive HSTS header
 discoveryottawa.ca: could not connect to host
 disking.co.uk: did not receive HSTS header
 dislocated.de: did not receive HSTS header
 disorderboutique.com: did not receive HSTS header
 disruptivelabs.net: could not connect to host
 disruptivelabs.org: could not connect to host
 dissimulo.me: could not connect to host
 distinguishedwindows.co.uk: did not receive HSTS header
 distractionco.de: did not receive HSTS header
 ditrutoancau.vn: could not connect to host
 dittvertshus.no: could not connect to host
 diva-ey.com: could not connect to host
+divegearexpress.com.cn: did not receive HSTS header
 diversity-spielzeug.de: did not receive HSTS header
 divvymonkey.com: did not receive HSTS header
 divvyradio.com: did not receive HSTS header
 dixiediner.com: did not receive HSTS header
 diyvideoeditor.com: did not receive HSTS header
 dizihocasi.com: could not connect to host
 dizorg.net: could not connect to host
 dj4et.de: could not connect to host
@@ -5153,17 +5162,16 @@ domaine-aigoual-cevennes.com: did not re
 domainelaremejeanne.com: did not receive HSTS header
 domaris.de: did not receive HSTS header
 domenicocatelli.com: did not receive HSTS header
 dominikanskarepubliken.guide: could not connect to host
 dominioanimal.com: could not connect to host
 dominique-mueller.de: did not receive HSTS header
 don.yokohama: could not connect to host
 donateway.com: did not receive HSTS header
-donhoward.org: did not receive HSTS header
 donmez.uk: could not connect to host
 donmez.ws: could not connect to host
 donsbach-edv.de: did not receive HSTS header
 donttrustrobots.nl: could not connect to host
 donzelot.co.uk: did not receive HSTS header
 doobydude.us: could not connect to host
 doodledraw.ninja: did not receive HSTS header
 dooku.cz: could not connect to host
@@ -5282,16 +5290,17 @@ dzlibs.io: could not connect to host
 dzytdl.com: did not receive HSTS header
 e-aut.net: could not connect to host
 e-deca2.org: did not receive HSTS header
 e-isfa.eu: did not receive HSTS header
 e-newshub.com: could not connect to host
 e-pokupki.eu: did not receive HSTS header
 e-rickroll-r.pw: could not connect to host
 e-sa.com: did not receive HSTS header
+e-vo-linka.cz: did not receive HSTS header
 e191.com: did not receive HSTS header
 e30gruppe.com: did not receive HSTS header
 e3amn2l.com: could not connect to host
 e3kids.com: did not receive HSTS header
 e505.net: did not receive HSTS header
 eagle-aluminum.com: did not receive HSTS header
 eam-gmbh.com: did not receive HSTS header
 earga.sm: could not connect to host
@@ -5325,17 +5334,17 @@ echoteam.gq: did not receive HSTS header
 eckro.com: did not receive HSTS header
 ecoheatcool.co.uk: did not receive HSTS header
 ecole-en-danger.fr: could not connect to host
 ecole-maternelle-saint-joseph.be: could not connect to host
 ecolesrec.ch: did not receive HSTS header
 ecology-21.ru: did not receive HSTS header
 ecomlane.com: could not connect to host
 ecomparemo.com: did not receive HSTS header
-economy.st: did not receive HSTS header
+economy.st: could not connect to host
 ecorus.eu: did not receive HSTS header
 ecotruck-pooling.com: did not receive HSTS header
 ecrimex.net: did not receive HSTS header
 edati.lv: could not connect to host
 edcphenix.tk: could not connect to host
 eddmixpanel.com: could not connect to host
 eddyn.net: did not receive HSTS header
 edelblack.ch: could not connect to host
@@ -5618,17 +5627,16 @@ evowl.com: could not connect to host
 ewallet-optimizer.com: did not receive HSTS header
 ewex.org: could not connect to host
 excelgum.ca: did not receive HSTS header
 exfiles.cz: did not receive HSTS header
 exgravitus.com: could not connect to host
 exno.co: could not connect to host
 exoscale.ch: did not receive HSTS header
 exousiakaidunamis.xyz: could not connect to host
-expanddigital.media: did not receive HSTS header
 experticon.com: did not receive HSTS header
 expertmile.com: did not receive HSTS header
 exploit.cz: did not receive HSTS header
 expo-designers.com: did not receive HSTS header
 expowerhps.com: did not receive HSTS header
 expressfinance.co.za: did not receive HSTS header
 extramoney.cash: did not receive HSTS header
 extrathemeshowcase.net: could not connect to host
@@ -5636,17 +5644,17 @@ extratorrentlive.xyz: could not connect 
 extratorrents.tech: could not connect to host
 extreemhost.nl: did not receive HSTS header
 extremenetworking.net: could not connect to host
 exy.pw: could not connect to host
 eyasc.nl: could not connect to host
 eye-carat.com: did not receive HSTS header
 eyedarts.com: did not receive HSTS header
 eyeglassuniverse.com: did not receive HSTS header
-eyes-of-universe.eu: could not connect to host
+eyes-of-universe.eu: did not receive HSTS header
 eyesoccer-didikh.rhcloud.com: could not connect to host
 eyesonly.cc: did not receive HSTS header
 ez.fi: could not connect to host
 ezimoeko.net: could not connect to host
 ezmod.org: could not connect to host
 ezrefurb.co.uk: did not receive HSTS header
 eztv.ch: did not receive HSTS header
 f-rickroll-g.pw: could not connect to host
@@ -5757,24 +5765,24 @@ fiftyshadesofluca.ml: could not connect 
 fig.co: did not receive HSTS header
 fightr.co: could not connect to host
 fiksel.info: did not receive HSTS header
 fikt.space: could not connect to host
 filebox.moe: could not connect to host
 filemeal.com: max-age too low: 0
 filey.co.uk: did not receive HSTS header
 fillmysuitca.se: did not receive HSTS header
-film.photography: did not receive HSTS header
 film.photos: did not receive HSTS header
 filme-online.eu.com: did not receive HSTS header
 filmesubtitrate2017.online: could not connect to host
 filo.xyz: did not receive HSTS header
 filoitoupediou.gr: did not receive HSTS header
 finalgear.com: did not receive HSTS header
 finalvpn.com: could not connect to host
+financier.io: did not receive HSTS header
 financieringsportaal.nl: did not receive HSTS header
 finanzkontor.net: could not connect to host
 findigo.fish: could not connect to host
 findingmyname.com: max-age too low: 2629746
 findtutorsnearme.com: did not receive HSTS header
 finer04.pw: did not receive HSTS header
 fingent.com: did not receive HSTS header
 finiteheap.com: did not receive HSTS header
@@ -5810,20 +5818,20 @@ fitsw.com: did not receive HSTS header
 five.vn: did not receive HSTS header
 fivestarsitters.com: did not receive HSTS header
 fivestepfunnels.com: could not connect to host
 fivezerocreative.com: did not receive HSTS header
 fixate.ru: could not connect to host
 fixico-staging.nl: could not connect to host
 fixingdns.com: could not connect to host
 fixtectools.co.za: could not connect to host
-fjruiz.es: could not connect to host
+fjruiz.es: did not receive HSTS header
 fkcovering.be: could not connect to host
-fl0000.com: max-age too low: 3600
-fl010.com: max-age too low: 3600
+fl0000.com: max-age too low: 129600
+fl010.com: max-age too low: 129600
 fl0111.com: did not receive HSTS header
 fl0222.com: did not receive HSTS header
 fl0333.com: did not receive HSTS header
 fl0555.com: did not receive HSTS header
 fl0666.com: did not receive HSTS header
 fl0777.com: did not receive HSTS header
 fl0888.com: did not receive HSTS header
 fl0999.com: did not receive HSTS header
@@ -5831,17 +5839,17 @@ flags.ninja: could not connect to host
 flairbros.at: could not connect to host
 flajshans.cz: did not receive HSTS header
 flamewall.net: could not connect to host
 flamingkeys.com.au: could not connect to host
 flareon.net: could not connect to host
 flatbellyreview.com: max-age too low: 2592000
 flawcheck.com: could not connect to host
 flc111.com: did not receive HSTS header
-flc999.com: max-age too low: 3600
+flc999.com: max-age too low: 129600
 fleursdesoleil.fr: did not receive HSTS header
 fliexer.com: could not connect to host
 flipbell.com: did not receive HSTS header
 flipkey.com: did not receive HSTS header
 flirchi.com: could not connect to host
 flirtycourts.com: did not receive HSTS header
 flixtor.net: could not connect to host
 floless.co.uk: did not receive HSTS header
@@ -5953,40 +5961,38 @@ fridaperfumaria.com.br: could not connec
 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
 fringeintravel.com: did not receive HSTS header
 froggstack.de: could not connect to host
 front-end.dog: 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
 frostbytes.net: did not receive HSTS header
 froxlor.support: max-age too low: 0
 frsis2017.com: could not connect to host
 fruitusers.com: could not connect to host
 frumious.fyi: could not connect to host
-fs-maistadt.de: did not receive HSTS header
 fsapubs.gov: did not receive HSTS header
 fsinf.at: did not receive HSTS header
 fspphoto.com: could not connect to host
 fsradio.eu: did not receive HSTS header
 fstfy.de: could not connect to host
 ftc.gov: did not receive HSTS header
 ftctele.com: could not connect to host
 fteproxy.org: did not receive HSTS header
 ftpi.ml: could not connect to host
 fuckbilibili.com: could not connect to host
 fuckgfw233.org: could not connect to host
 fudanshi.org: could not connect to host
 fukuoka-cityliner.jp: did not receive HSTS header
 fukushima-web.com: did not receive HSTS header
-fuli.am: max-age too low: 3600
+fuli.am: max-age too low: 129600
 fulilingyu.info: could not connect to host
 fuliydys.com: did not receive HSTS header
 fullytrained.co.uk: did not receive HSTS header
 fumiware.com: could not connect to host
 funarena.com.ua: could not connect to host
 fundacionhijosdelsol.org: could not connect to host
 funderburg.me: max-age too low: 2592000
 fungame.eu: did not receive HSTS header
@@ -6049,17 +6055,17 @@ gamehacks.me: could not connect to host
 gameink.net: could not connect to host
 gamek.es: could not connect to host
 gamenected.com: could not connect to host
 gamenected.de: could not connect to host
 gamepad.vg: could not connect to host
 gamepader.com: could not connect to host
 gameparade.de: could not connect to host
 gameparagon.info: could not connect to host
-gamepiece.com: did not receive HSTS header
+gamepiece.com: max-age too low: 300
 gamers-life.fr: could not connect to host
 gamerslair.org: did not receive HSTS header
 gamerz-point.de: could not connect to host
 gamesdepartment.co.uk: could not connect to host
 gameserver-sponsor.de: did not receive HSTS header
 gamesurferapp.com: could not connect to host
 gamingmedia.eu: did not receive HSTS header
 gamoice.com: did not receive HSTS header
@@ -6095,17 +6101,17 @@ gemuplay.com: could not connect to host
 generalpants.com.au: did not receive HSTS header
 genesischangelog.com: did not receive HSTS header
 genshiken.org: could not connect to host
 genuu.com: could not connect to host
 genuxation.com: could not connect to host
 genyaa.com: could not connect to host
 genyhitch.com: did not receive HSTS header
 geoffdev.com: could not connect to host
-geoffreyrichard.com: did not receive HSTS header
+geoffreyrichard.com: could not connect to host
 geopals.net: did not receive HSTS header
 george-brighton.co.uk: could not connect to host
 georgebrighton.co.uk: could not connect to host
 georgesonarthurs.com.au: did not receive HSTS header
 gereja.ga: max-age too low: 1209600
 gerencianet.com.br: did not receive HSTS header
 gereon.ch: could not connect to host
 gesiwista.net: did not receive HSTS header
@@ -6197,16 +6203,17 @@ globalexpert.co.nz: could not connect to
 globalinsights.xyz: could not connect to host
 globalittech.com: could not connect to host
 globalmusic.ga: could not connect to host
 globalsites.nl: did not receive HSTS header
 glotter.com: did not receive HSTS header
 gloucesterphotographer.com: did not receive HSTS header
 glubbforum.de: did not receive HSTS header
 glws.org: did not receive HSTS header
+gm-assicurazioni.it: did not receive HSTS header
 gmat.ovh: could not connect to host
 gmind.ovh: did not receive HSTS header
 gmoes.at: could not connect to host
 go.ax: did not receive HSTS header
 go2sh.de: did not receive HSTS header
 go4it.solutions: did not receive HSTS header
 goabonga.com: could not connect to host
 goalsetup.com: did not receive HSTS header
@@ -6220,17 +6227,17 @@ goedeke.ml: could not connect to host
 goerner.me: did not receive HSTS header
 goge.site: could not connect to host
 gogenenglish.com: could not connect to host
 gogetssl.com: did not receive HSTS header
 goggs.eu: could not connect to host
 gogold-g.com: could not connect to host
 goguel.org: max-age too low: 2592000
 gold24.in: could not connect to host
-goldegg-training.com: could not connect to host
+goldegg-training.com: did not receive HSTS header
 goldendata.io: could not connect to host
 goldminer.ga: could not connect to host
 goldpros.com: did not receive HSTS header
 golocal-media.de: could not connect to host
 gomiblog.com: did not receive HSTS header
 gong8.win: could not connect to host
 gonzalosanchez.mx: could not connect to host
 goodfurday.ca: did not receive HSTS header
@@ -6527,16 +6534,17 @@ helpium.de: could not connect to host
 helpmebuild.com: did not receive HSTS header
 helpmij.cf: did not receive HSTS header
 helpwithmybank.gov: did not receive HSTS header
 hemlockhillscabinrentals.com: did not receive HSTS header
 hencagon.com: could not connect to host
 hendersonrealestatepros.com: did not receive HSTS header
 hendric.us: did not receive HSTS header
 hepteract.us: did not receive HSTS header
+her25.com: did not receive HSTS header
 herbertmouwen.nl: could not connect to host
 here4funpartysolutions.ie: did not receive HSTS header
 heribe-maruo.com: did not receive HSTS header
 heritagedentistry.ca: did not receive HSTS header
 heroin.org.uk: did not receive HSTS header
 herrenfahrt.com: did not receive HSTS header
 heutger.net: did not receive HSTS header
 hex2013.com: did not receive HSTS header
@@ -6759,17 +6767,17 @@ ierna.com: did not receive HSTS header
 ies-italia.it: did not receive HSTS header
 ies.id.lv: could not connect to host
 ievgenialehner.com: did not receive HSTS header
 ifad.org: did not receive HSTS header
 ifastuniversity.com: did not receive HSTS header
 ifleurs.com: could not connect to host
 ifx.ee: could not connect to host
 ifxor.com: did not receive HSTS header
-igd.chat: did not receive HSTS header
+igd.chat: could not connect to host
 igforums.com: could not connect to host
 igi.codes: did not receive HSTS header
 igiftcards.nl: did not receive HSTS header
 ignatisd.gr: did not receive HSTS header
 igule.net: could not connect to host
 ihotel.io: did not receive HSTS header
 ihrlotto.de: could not connect to host
 ihrnationalrat.ch: could not connect to host
@@ -6953,30 +6961,29 @@ iprice.hk: did not receive HSTS header
 iprice.my: did not receive HSTS header
 iprice.ph: did not receive HSTS header
 iprice.sg: did not receive HSTS header
 iprice.vn: did not receive HSTS header
 ipricethailand.com: did not receive HSTS header
 iprim.ru: did not receive HSTS header
 ipsilon-project.org: did not receive HSTS header
 iptel.ro: could not connect to host
-ipv6.watch: did not receive HSTS header
+ipv6.watch: could not connect to host
 ipv6cloud.club: could not connect to host
 ipv6only.network: could not connect to host
 ipvsec.nl: could not connect to host
 iqcn.co: could not connect to host
 iqualtech.com: max-age too low: 7889238
 ir-saitama.com: could not connect to host
 iranianlawschool.com: could not connect to host
 iraqidinar.org: did not receive HSTS header
 irazimina.ru: did not receive HSTS header
 irccloud.com: did not receive HSTS header
 ircmett.de: did not receive HSTS header
 irelandesign.com: could not connect to host
-irfan.id: did not receive HSTS header
 irisdina.de: could not connect to host
 irland.guide: could not connect to host
 irmtrudjurke.de: did not receive HSTS header
 irodorinet.com: max-age too low: 0
 irstaxforumsonline.com: did not receive HSTS header
 irugs.ch: did not receive HSTS header
 irugs.co.uk: did not receive HSTS header
 irugs.com.sg: did not receive HSTS header
@@ -6988,17 +6995,16 @@ isdf.me: could not connect to host
 isef-eg.com: did not receive HSTS header
 iseulde.com: did not receive HSTS header
 ishadowsocks.ltd: could not connect to host
 ishillaryclintoninprisonyet.com: could not connect to host
 isitamor.pm: could not connect to host
 iskai.net: did not receive HSTS header
 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
 isoface33.fr: did not receive HSTS header
 isogen5.com: could not connect to host
 isogram.nl: did not receive HSTS header
 issala.org: did not receive HSTS header
 istanbul.systems: did not receive HSTS header
 istanbultravelguide.info: could not connect to host
 istaspirtslietas.lv: did not receive HSTS header
@@ -7225,16 +7231,17 @@ jonn.me: could not connect to host
 jonnichols.info: could not connect to host
 jonsno.ws: could not connect to host
 joostbovee.nl: could not connect to host
 jordanstrustcompany.cn: could not connect to host
 jordanstrustcompany.ru: could not connect to host
 jordikroon.nl: could not connect to host
 joretapo.fr: could not connect to host
 jorgemesa.me: could not connect to host
+jornadasciberdefensa2016.es: did not receive HSTS header
 jorovik.com: did not receive HSTS header
 jorrit.info: max-age too low: 0
 josahrens.me: could not connect to host
 josecage.com: could not connect to host
 josefottosson.se: max-age too low: 2592000
 joshi.su: could not connect to host
 joshplant.co.uk: could not connect to host
 joshstroup.me: could not connect to host
@@ -7279,19 +7286,19 @@ jupp0r.de: did not receive HSTS header
 juristas.com.br: did not receive HSTS header
 jurke.com: did not receive HSTS header
 justiceforfathers.com: could not connect to host
 justinlemay.com: could not connect to host
 justlikethat.hosting: did not receive HSTS header
 justmy.website: did not receive HSTS header
 justnaw.co.uk: could not connect to host
 justudin.com: did not receive HSTS header
-justwood.cz: did not receive HSTS header
 jutella.de: did not receive HSTS header
 juvenex.co: could not connect to host
+juventusclublugano.ch: did not receive HSTS header
 juwairen.cn: could not connect to host
 jvoice.net: could not connect to host
 jvwdev.nl: did not receive HSTS header
 jwilsson.me: could not connect to host
 jxm.in: could not connect to host
 jym.fit: did not receive HSTS header
 jysperm.me: did not receive HSTS header
 jznet.org: could not connect to host
@@ -7578,16 +7585,17 @@ labrador-retrievers.com.au: did not rece
 labrasaq8.com: did not receive HSTS header
 labs.directory: could not connect to host
 labs.moscow: did not receive HSTS header
 lacarpesaintaubinoise.fr: did not receive HSTS header
 lacaverne.nl: could not connect to host
 lacentral.com: did not receive HSTS header
 lachlankidson.net: did not receive HSTS header
 lacledeslan.ninja: could not connect to host
+lacliniquefinanciere.com: did not receive HSTS header
 lacocinadelila.com: did not receive HSTS header
 ladylucks.co.uk: did not receive HSTS header
 laemen.com: did not receive HSTS header
 laemen.nl: could not connect to host
 laf.in.net: could not connect to host
 lagalerievirtuelle.fr: did not receive HSTS header
 lagier.xyz: could not connect to host
 lagoza.name: could not connect to host
@@ -7661,17 +7669,16 @@ lebrun.org: could not connect to host
 lecourtier.fr: did not receive HSTS header
 leddruckalarm.de: did not receive HSTS header
 ledgerscope.net: could not connect to host
 ledhouse.sk: did not receive HSTS header
 leen.io: could not connect to host
 leetsaber.com: did not receive HSTS header
 legarage.org: did not receive HSTS header
 legavenue.com.br: did not receive HSTS header
-legendary.camera: did not receive HSTS header
 legymnase.eu: did not receive HSTS header
 lehtinen.xyz: did not receive HSTS header
 leighneithardt.com: could not connect to host
 leinir.dk: did not receive HSTS header
 leitner.com.au: did not receive HSTS header
 leiyun.me: did not receive HSTS header
 lellyboi.ml: could not connect to host
 lelongbank.com: did not receive HSTS header
@@ -7720,17 +7727,17 @@ lgts.se: could not connect to host
 lheinrich.com: did not receive HSTS header
 liaillustr.at: did not receive HSTS header
 liam-w.com: could not connect to host
 liamjack.fr: could not connect to host
 lianye.in: could not connect to host
 lianyexiuchang.in: could not connect to host
 liaoshuma.com: could not connect to host
 libanco.com: could not connect to host
-libdeer.so: did not receive HSTS header
+libdeer.so: could not connect to host
 libertyrp.org: did not receive HSTS header
 libfte.org: did not receive HSTS header
 librairie-asie.com: did not receive HSTS header
 library.linode.com: did not receive HSTS header
 librechan.net: could not connect to host
 librisulibri.it: did not receive HSTS header
 lichess4545.com: did not receive HSTS header
 lichess4545.tv: did not receive HSTS header
@@ -7773,16 +7780,17 @@ lingolia.com: did not receive HSTS heade
 lingros-test.tk: could not connect to host
 linguaquote.com: did not receive HSTS header
 linhaoyi.com: did not receive HSTS header
 link.ba: could not connect to host
 linkage.ph: did not receive HSTS header
 linmi.cc: did not receive HSTS header
 linno.me: could not connect to host
 linorman1997.me: could not connect to host
+linostassi.net: did not receive HSTS header
 linux-mint.cz: could not connect to host
 linuxandstuff.de: could not connect to host
 linuxeyecandy.com: could not connect to host
 linuxfixed.it: could not connect to host
 linuxforyou.com: could not connect to host
 linuxgeek.ro: could not connect to host
 linuxmint.cz: could not connect to host
 linuxmonitoring.net: did not receive HSTS header
@@ -7837,18 +7845,17 @@ loisircreatif.net: did not receive HSTS 
 lojadocristaozinho.com.br: did not receive HSTS header
 lojashowdecozinha.com.br: could not connect to host
 lojasviavento.com.br: could not connect to host
 lojavalcapelli.com.br: could not connect to host
 loli.bz: did not receive HSTS header
 loli.ski: did not receive HSTS header
 lolicore.ch: could not connect to host
 lolidunno.com: could not connect to host
-lollaconcept.com.br: did not receive HSTS header
-loma.ml: did not receive HSTS header
+lollaconcept.com.br: could not connect to host
 londoncalling.co: did not receive HSTS header
 londonlanguageexchange.com: could not connect to host
 lonerwolf.com: did not receive HSTS header
 longboarding-ulm.de: could not connect to host
 look-at-my.site: could not connect to host
 lookatmysco.re: did not receive HSTS header
 lookout.com: did not receive HSTS header
 looktothestars.org: did not receive HSTS header
@@ -7948,17 +7955,17 @@ macbolo.com: could not connect to host
 macchaberrycream.com: could not connect to host
 macchedil.com: did not receive HSTS header
 macdj.tk: could not connect to host
 macedopesca.com.br: did not receive HSTS header
 macgeneral.de: did not receive HSTS header
 mach1club.com: did not receive HSTS header
 macleodnc.com: did not receive HSTS header
 macsandcheesedreams.com: could not connect to host
-macustar.eu: could not connect to host
+macustar.eu: did not receive HSTS header
 madcatdesign.de: did not receive HSTS header
 maddin.ga: could not connect to host
 madebyfalcon.co.uk: did not receive HSTS header
 madebymagnitude.com: did not receive HSTS header
 madeinorder.com: did not receive HSTS header
 mademoiselle-emma.be: could not connect to host
 mademoiselle-emma.fr: could not connect to host
 maderwin.com: did not receive HSTS header
@@ -7984,17 +7991,16 @@ mailing-jbgg.com: could not connect to h
 main-street-seo.com: did not receive HSTS header
 mainlywrenches.co: max-age too low: 0
 maintainerheaven.ch: could not connect to host
 maisalto.ind.br: could not connect to host
 majncloud.tk: could not connect to host
 make-pizza.info: could not connect to host
 makedonien.guide: could not connect to host
 makeitdynamic.com: could not connect to host
-makerstuff.net: did not receive HSTS header
 makeshiftco.de: did not receive HSTS header
 makeyourank.com: max-age too low: 200
 maldiverna.guide: could not connect to host
 maleexcel.com: did not receive HSTS header
 malena.com.ua: did not receive HSTS header
 malerversand.de: did not receive HSTS header
 malfait.nl: could not connect to host
 malibubeachrecoverycenter.com: did not receive HSTS header
@@ -8038,17 +8044,17 @@ maomaofuli.vip: could not connect to hos
 maosi.xin: could not connect to host
 maple5.com: could not connect to host
 maplenorth.co: did not receive HSTS header
 mapresidentielle.fr: could not connect to host
 marcelparra.com: could not connect to host
 marchagen.nl: did not receive HSTS header
 marchhappy.tech: did not receive HSTS header
 marco01809.net: could not connect to host
-marcoececilia.it: could not connect to host
+marcoececilia.it: did not receive HSTS header
 marcofinke.de: could not connect to host
 marcontrol.com: did not receive HSTS header
 marcosteixeira.tk: could not connect to host
 marcschlagenhauf.de: could not connect to host
 marcus-scheffler.com: did not receive HSTS header
 marcush.de: could not connect to host
 margaretrosefashions.co.uk: could not connect to host
 marialempke.com: max-age too low: 0
@@ -8203,19 +8209,20 @@ melhoresdominios.net: could not connect 
 melted.pw: could not connect to host
 melvinlow.com: did not receive HSTS header
 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
 memorygame.io: did not receive HSTS header
 memorytrace.space: could not connect to host
+menotag.com: did not receive HSTS header
 mensachterdepatient.nl: max-age too low: 2592000
 mensmaximus.de: did not receive HSTS header
-mentax.net: could not connect to host
+mentax.net: did not receive HSTS header
 menthix.net: could not connect to host
 menudrivetest.com: could not connect to host
 meow.cloud: could not connect to host
 meozcraft.com: could not connect to host
 mercamaris.es: did not receive HSTS header
 merccorp.de: max-age too low: 0
 mercedes-benz-usedcars.be: could not connect to host
 mereckas.com: could not connect to host
@@ -8484,16 +8491,17 @@ movio.ga: did not receive HSTS header
 moy-gorod.od.ua: did not receive HSTS header
 mozart-game.cz: could not connect to host
 mozartgame.cz: did not receive HSTS header
 mozillians.org: did not receive HSTS header
 mozoa.net: could not connect to host
 mp3donusturucu.com: did not receive HSTS header
 mp3donusturucu.net: did not receive HSTS header
 mp3juices.is: could not connect to host
+mpintaamalabanna.it: did not receive HSTS header
 mpkossen.com: did not receive HSTS header
 mqas.net: did not receive HSTS header
 mr-hosting.com: could not connect to host
 mrawe.com: could not connect to host
 mrdani.net: could not connect to host
 mrdleisure.co.uk: did not receive HSTS header
 mredsanders.net: did not receive HSTS header
 mrettich.org: did not receive HSTS header
@@ -8502,17 +8510,16 @@ mrning.com: did not receive HSTS header
 mrnonz.com: max-age too low: 0
 mrparker.pw: did not receive HSTS header
 mrpopat.in: did not receive HSTS header
 mrs-shop.com: could not connect to host
 mrsbairds.com: max-age too low: 86400
 msc-seereisen.net: max-age too low: 0
 mstd.tokyo: did not receive HSTS header
 mstdn-tech.jp: could not connect to host
-mstdn.io: did not receive HSTS header
 mstdn.nl: did not receive HSTS header
 mszaki.com: did not receive HSTS header
 mt.me.uk: could not connect to host
 mtamaki.com: could not connect to host
 mtau.com: max-age too low: 2592000
 mtcgf.com: did not receive HSTS header
 mtdn.jp: could not connect to host
 mtg-esport.de: did not receive HSTS header
@@ -8636,24 +8643,28 @@ nan.ci: did not receive HSTS header
 nan.zone: could not connect to host
 naniki.co.uk: could not connect to host
 nanogeneinc.com: could not connect to host
 nanokamo.com: did not receive HSTS header
 nanrenba.net: could not connect to host
 nansay.cn: could not connect to host
 nanto.eu: could not connect to host
 narach.com: did not receive HSTS header
+nargele.eu: did not receive HSTS header
 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
+natenom.com: max-age too low: 7200
+natenom.de: max-age too low: 7200
+natenom.name: max-age too low: 7200
 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
 naturesharvestbread.com: max-age too low: 86400
 natuurbehangnederland.nl: could not connect to host
 nauck.org: did not receive HSTS header
 naudles.me: could not connect to host
@@ -8698,17 +8709,17 @@ net2o.de: did not receive HSTS header
 net4it.de: did not receive HSTS header
 netbox.cc: could not connect to host
 netbrief.ml: could not connect to host
 netfs.pl: did not receive HSTS header
 netherwind.eu: did not receive HSTS header
 netlilo.com: could not connect to host
 netloanusa.com: could not connect to host
 netmagik.com: did not receive HSTS header
-netprofile.com.au: could not connect to host
+netprofile.com.au: did not receive HSTS header
 netresourcedesign.com: could not connect to host
 netsparkercloud.com: did not receive HSTS header
 nettefoundation.com: could not connect to host
 netweaver.uk: did not receive HSTS header
 networx-online.de: could not connect to host
 netzbit.de: could not connect to host
 netzpolitik.org: max-age too low: 2592000
 netztest.at: did not receive HSTS header
@@ -8948,17 +8959,21 @@ oganek.ie: could not connect to host
 oganime.com: could not connect to host
 ogogoshop.com: could not connect to host
 ohm2013.org: did not receive HSTS header
 ohohrazi.com: did not receive HSTS header
 ohsocool.org: did not receive HSTS header
 oiepoie.nl: could not connect to host
 oishioffice.com: did not receive HSTS header
 ojls.co: could not connect to host
+okad-center.de: did not receive HSTS header
+okad.de: did not receive HSTS header
+okad.eu: did not receive HSTS header
 okane.love: could not connect to host
+okaz.de: did not receive HSTS header
 okok-rent.com: could not connect to host
 okok.rent: could not connect to host
 okutama.in.th: could not connect to host
 olafnorge.de: did not receive HSTS header
 olanderflorist.com: could not connect to host
 olcso-vps-szerver.hu: could not connect to host
 oldoakflorist.com: could not connect to host
 oliverdunk.com: did not receive HSTS header
@@ -9095,16 +9110,17 @@ oswaldmattgroup.com: did not receive HST
 otakuworld.de: could not connect to host
 othercode.nl: could not connect to host
 othermedia.cc: [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 116"  data: no]
 otherstuff.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 116"  data: no]
 otichi.com: did not receive HSTS header
 otokonna.com: did not receive HSTS header
 otrsdemo.hu: did not receive HSTS header
 ottospora.nl: could not connect to host
+ouglor.com: did not receive HSTS header
 ourbank.com: max-age too low: 2592000
 outdooradventures.pro: did not receive HSTS header
 outdoorproducts.com: did not receive HSTS header
 outlines.xyz: did not receive HSTS header
 outreachbuddy.com: could not connect to host
 outsider.im: could not connect to host
 outurnate.com: did not receive HSTS header
 ouvirmusica.com.br: did not receive HSTS header
@@ -9187,16 +9203,17 @@ parodybit.net: did not receive HSTS head
 parpaing-paillette.net: could not connect to host
 particonpsplus.it: could not connect to host
 partiono.com: did not receive HSTS header
 partirkyoto.jp: did not receive HSTS header
 partnercardservices.com: did not receive HSTS header
 partnersfcu.org: did not receive HSTS header
 partyhaus.ovh: could not connect to host
 partyhireformby.co.uk: did not receive HSTS header
+partyspecialists.com: did not receive HSTS header
 partyvan.eu: could not connect to host
 partyvan.it: could not connect to host
 partyvan.moe: could not connect to host
 partyvan.nl: could not connect to host
 partyvan.se: could not connect to host
 pascalchristen.ch: did not receive HSTS header
 pascaline-jouis.fr: did not receive HSTS header
 passpilot.co.uk: did not receive HSTS header
@@ -9210,16 +9227,18 @@ paste.linode.com: could not connect to h
 pastebin.linode.com: could not connect to host
 pastenib.com: could not connect to host
 paster.li: did not receive HSTS header
 pataua.kiwi: did not receive HSTS header
 paternitydnatest.com: could not connect to host
 patfs.com: did not receive HSTS header
 patientinsight.net: did not receive HSTS header
 patrick.dark.name: did not receive HSTS header
+patsyforyou.ch: did not receive HSTS header
+patsytoforyou.ch: did not receive HSTS header
 patt.us: did not receive HSTS header
 patterson.mp: could not connect to host
 paul-kerebel.pro: could not connect to host
 paulbunyanmls.com: did not receive HSTS header
 paulerhof.com: did not receive HSTS header
 paulproell.at: did not receive HSTS header
 paulyang.cn: did not receive HSTS header
 pavelfojt.cz: did not receive HSTS header
@@ -9304,17 +9323,17 @@ petravdbos.nl: did not receive HSTS head
 petrkrapek.cz: did not receive HSTS header
 petrolplus.ru: max-age too low: 7776000
 petrovsky.pro: could not connect to host
 petsittersservices.com: could not connect to host
 pettsy.com: could not connect to host
 peuterspeelzaalhoekvanholland.nl: did not receive HSTS header
 pewboards.com: did not receive HSTS header
 pexieapp.com: did not receive HSTS header
-peytonfarrar.com: did not receive HSTS header
+peytonfarrar.com: could not connect to host
 pfgshop.com.br: could not connect to host
 pflegedienst-gratia.de: max-age too low: 300
 pgcpbc.com: could not connect to host
 pgpm.io: could not connect to host
 pgregg.com: could not connect to host
 pgtb.be: could not connect to host
 phalconist.com: could not connect to host
 pharmgkb.org: could not connect to host
@@ -9385,16 +9404,17 @@ pixelhero.co.uk: did not receive HSTS he
 pixi.chat: could not connect to host
 pixi.me: did not receive HSTS header
 pizzadoc.ch: could not connect to host
 pjbet.mg: did not receive HSTS header
 pkautodesign.com: did not receive HSTS header
 pkschat.com: could not connect to host
 placollection.org: could not connect to host
 plaettliaktion.ch: did not receive HSTS header
+plagiarismcheck.org: did not receive HSTS header
 planpharmacy.com: could not connect to host
 plant.ml: could not connect to host
 plantroon.com: could not connect to host
 plass.hamburg: could not connect to host
 plasvilledescartaveis.com.br: could not connect to host
 plataformadeinformacion.es: max-age too low: 30000
 platform.lookout.com: could not connect to host
 platomania.eu: did not receive HSTS header
@@ -9501,17 +9521,17 @@ prediksisydney.com: could not connect to
 preezzie.com: could not connect to host
 prefis.com: did not receive HSTS header
 prefontaine.name: could not connect to host
 prego-shop.de: could not connect to host
 preissler.co.uk: could not connect to host
 prelist.org: did not receive HSTS header
 prelogica.com.br: did not receive HSTS header
 premioambiente.it: did not receive HSTS header
-premiumzweirad.de: max-age too low: 7776000
+premiumzweirad.de: could not connect to host
 prepandgo-euro.com: could not connect to host
 preparedcapital.com: max-age too low: 300
 preppertactics.com: did not receive HSTS header
 presidentials2016.com: could not connect to host
 press-anime-nenkan.com: did not receive HSTS header
 pressenews.net: did not receive HSTS header
 pressfreedomfoundation.org: did not receive HSTS header
 pretrialservices.gov: did not receive HSTS header
@@ -9520,23 +9540,23 @@ prettyphotoart.de: did not receive HSTS 
 pretzlaff.info: did not receive HSTS header
 preworkout.me: could not connect to host
 prgslab.net: could not connect to host
 pridoc.se: did not receive HSTS header
 prilock.com: did not receive HSTS header
 primecaplending.com: could not connect to host
 primotiles.co.uk: did not receive HSTS header
 prinbanat.ngo: did not receive HSTS header
-princesparktouch.com: did not receive HSTS header
 princessmargaretlotto.com: did not receive HSTS header
 printerest.io: could not connect to host
 printersonline.be: did not receive HSTS header
 printery.be: could not connect to host
 priolkar.com: did not receive HSTS header
 pristineevents.co.uk: did not receive HSTS header
+pritchett.xyz: did not receive HSTS header
 priva.si: max-age too low: 0
 privacylabs.io: did not receive HSTS header
 privacynow.eu: did not receive HSTS header
 privacyrup.net: could not connect to host
 privytime.com: could not connect to host
 prnt.li: did not receive HSTS header
 pro-zone.com: could not connect to host
 probas.de: max-age too low: 0
@@ -9596,17 +9616,18 @@ ps-x.ru: did not receive HSTS header
 psa.gov: did not receive HSTS header
 pscleaningsolutions.co.uk: could not connect to host
 pshostpk.com: did not receive HSTS header
 psicologia.co.ve: could not connect to host
 psicologoforensebarcelona.com: did not receive HSTS header
 pstudio.me: did not receive HSTS header
 psw.academy: could not connect to host
 psw.consulting: could not connect to host
-psylab.re: did not receive HSTS header
+psylab.cc: did not receive HSTS header
+psylab.re: could not connect to host
 psylab.vip: did not receive HSTS header
 ptn.moscow: could not connect to host
 ptonet.com: could not connect to host
 ptrujillo.com: did not receive HSTS header
 pubkey.is: could not connect to host
 publications.qld.gov.au: did not receive HSTS header
 publicidadnovagrass.com.mx: could not connect to host
 puentes.info: did not receive HSTS header
@@ -9614,16 +9635,17 @@ pugliese.fr: could not connect to host
 puiterwijk.org: could not connect to host
 pulsar.guru: did not receive HSTS header
 pulsedursley.co.uk: did not receive HSTS header
 pult.co: could not connect to host
 pumpgames.net: could not connect to host
 punchkickinteractive.com: did not receive HSTS header
 punchr-kamikazee.rhcloud.com: could not connect to host
 punchunique.com: did not receive HSTS header
+punte-juwelier.nl: did not receive HSTS header
 puppydns.com: did not receive HSTS header
 purewebmasters.com: could not connect to host
 purplez.pw: did not receive HSTS header
 purpoz.com.br: could not connect to host
 push.world: did not receive HSTS header
 pushapp.org: did not receive HSTS header
 pushstar.com: max-age too low: 0
 pvagner.tk: did not receive HSTS header
@@ -9672,16 +9694,17 @@ quakerlens.com: did not receive HSTS hea
 quality1.com.br: did not receive HSTS header
 qualityology.com: did not receive HSTS header
 quanglepro.com: could not connect to host
 quantacloud.ch: could not connect to host
 quantenteranik.eu: could not connect to host
 quantum-cloud.xyz: could not connect to host
 quantum-ethics.com: could not connect to host
 quantumcourse.org: did not receive HSTS header
+quarryhillrentals.com: did not receive HSTS header
 quebecmailbox.com: could not connect to host
 queenbrownie.com.br: could not connect to host
 quelmandataire.fr: did not receive HSTS header
 queroreceitasoberana.com.br: max-age too low: 0
 queryplayground.com: could not connect to host
 questsandrewards.com: could not connect to host
 quickandroid.tools: could not connect to host
 quickpayservice.com: could not connect to host
@@ -9881,23 +9904,24 @@ revello.org: did not receive HSTS header
 reverie.pw: could not connect to host
 review.info: did not receive HSTS header
 reviewbestseller.com: did not receive HSTS header
 reviewjust.com: did not receive HSTS header
 revistapequenosolhares.com.br: could not connect to host
 revtut.net: could not connect to host
 rewardstock.com: max-age too low: 0
 rewopit.net: could not connect to host
+rfxanalyst.com: did not receive HSTS header
 rhapsodhy.hu: could not connect to host
 rhdigital.pro: could not connect to host
 rhering.de: could not connect to host
 rhodosdreef.nl: could not connect to host
 riaucybersolution.net: did not receive HSTS header
 richiemail.net: could not connect to host
-richmondsunlight.com: could not connect to host
+richmondsunlight.com: did not receive HSTS header
 richsiciliano.com: could not connect to host
 richterphilipp.com: could not connect to host
 rid-wan.com: could not connect to host
 rideaudiscount.com: did not receive HSTS header
 rideforwade.com: could not connect to host
 rideforwade.net: could not connect to host
 rideforwade.org: could not connect to host
 rideworks.com: did not receive HSTS header
@@ -9912,16 +9936,17 @@ rijnmondeg.nl: did not receive HSTS head
 rika.me: could not connect to host
 ring0.xyz: did not receive HSTS header
 ringh.am: could not connect to host
 rionewyork.com.br: could not connect to host
 ripa.io: did not receive HSTS header
 rippleunion.com: could not connect to host
 risingsun.red: did not receive HSTS header
 riskmgt.com.au: could not connect to host
+ristoarea.it: did not receive HSTS header
 rithm.ch: could not connect to host
 rivercruiseadvisor.com: did not receive HSTS header
 rivermendhealthcenters.com: did not receive HSTS header
 rivlo.com: could not connect to host
 rizon.me: max-age too low: 0
 rj.gg: could not connect to host
 rk6.cz: could not connect to host
 rkkhok.hu: did not receive HSTS header
@@ -9964,17 +9989,16 @@ ronwo.de: max-age too low: 1
 roo.ie: could not connect to host
 rootforum.org: did not receive HSTS header
 rootservice.org: did not receive HSTS header
 rootwpn.com: could not connect to host
 rop.io: could not connect to host
 roquecenter.org: did not receive HSTS header
 rorymcdaniel.com: did not receive HSTS header
 roseitsolutions.uk: did not receive HSTS header
-rossclark.com: did not receive HSTS header
 rossen.be: did not receive HSTS header
 rossiworld.com: did not receive HSTS header
 rotex1840.de: did not receive HSTS header
 rotter-dam.nl: did not receive HSTS header
 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
@@ -10003,17 +10027,16 @@ rubyshop.nl: max-age too low: 604800
 rudeotter.com: did not receive HSTS header
 rue-de-la-vieille.fr: max-age too low: 0
 rugirlfriend.com: could not connect to host
 rugs.ca: did not receive HSTS header
 rugstorene.co.uk: did not receive HSTS header
 ruig.jp: could not connect to host
 ruitershoponline.nl: did not receive HSTS header
 ruja.dk: did not receive HSTS header
-rumlager.de: max-age too low: 600000
 rumoterra.com.br: could not connect to host
 runawebinar.nl: could not connect to host
 runhardt.eu: did not receive HSTS header
 runtl.com: did not receive HSTS header
 runtondev.com: did not receive HSTS header
 ruqu.nl: could not connect to host
 rusadmin.biz: did not receive HSTS header
 ruska-modra.cz: did not receive HSTS header
@@ -10074,17 +10097,16 @@ sandviks.com: did not receive HSTS heade
 sanguoxiu.com: could not connect to host
 sanhei.ch: did not receive HSTS header
 sanik.my: did not receive HSTS header
 sanissimo.com.mx: max-age too low: 86400
 sansage.com.br: could not connect to host
 sansdev.com: could not connect to host
 sansemea.com: did not receive HSTS header
 santi.eu: did not receive HSTS header
-santing.net: could not connect to host
 santorinibbs.com: did not receive HSTS header
 santouri.be: could not connect to host
 saotn.org: did not receive HSTS header
 sarah-beckett-harpist.com: did not receive HSTS header
 sarahsweetlife.com: could not connect to host
 sarahsweger.com: could not connect to host
 sarakas.com: could not connect to host
 saraleebread.com: max-age too low: 86400
@@ -10147,16 +10169,17 @@ schulterglatzen-altenwalde.de: could not
 schultzflorists.com: could not connect to host
 schwarzkopfforyou.de: did not receive HSTS header
 schweiz.guide: could not connect to host
 schweizerbolzonello.net: could not connect to host
 schwetz.net: could not connect to host
 scicasts.com: max-age too low: 7776000
 scienceathome.org: did not receive HSTS header
 sciencebase.gov: did not receive HSTS header
+scionasset.com: did not receive HSTS header
 scivillage.com: did not receive HSTS header
 sckc.stream: could not connect to host
 sclgroup.cc: did not receive HSTS header
 scooshonline.co.uk: did not receive HSTS header
 scopea.fr: max-age too low: 0
 score-savers.com: max-age too low: 10540800
 scores4schools.com: could not connect to host
 scottdial.com: did not receive HSTS header
@@ -10260,30 +10283,30 @@ semps-servers.de: could not connect to h
 sendash.com: could not connect to host
 sendmeback.de: did not receive HSTS header
 senedirect.com: could not connect to host
 sens2lavie.com: max-age too low: 0
 senseofnumber.co.uk: did not receive HSTS header
 sensiblemn.org: could not connect to host
 sensibus.com: did not receive HSTS header
 seobot.com.au: could not connect to host
+seoinc.com: did not receive HSTS header
 seomobo.com: could not connect to host
 seosanantonioinc.com: did not receive HSTS header
 seowarp.net: did not receive HSTS header
 sep23.ru: did not receive HSTS header
 sepie.gob.es: did not receive HSTS header
 seq.tf: did not receive HSTS header
 serathius.ovh: could not connect to host
 serbien.guide: could not connect to host
 serenitycreams.com: did not receive HSTS header
 serfdom.io: did not receive HSTS header
 serized.pw: could not connect to host
 serkaneles.com: did not receive HSTS header
 serverangels.co.uk: did not receive HSTS header
-servercode.ca: did not receive HSTS header
 serverdensity.io: did not receive HSTS header
 servergno.me: did not receive HSTS header
 servermonkey.nl: could not connect to host
 servicevie.com: did not receive HSTS header
 servu.de: did not receive HSTS header
 seryo.moe: could not connect to host
 seryo.net: could not connect to host
 setphaserstostun.org: could not connect to host
@@ -10308,17 +10331,17 @@ shadowroket.com: did not receive HSTS he
 shadowshocks.net: could not connect to host
 shadowsocks.gift: could not connect to host
 shadowsocks.net: could not connect to host
 shadowsocks.vc: could not connect to host
 shadowsocks.wiki: did not receive HSTS header
 shadowsocksvpn.com: could not connect to host
 shadowsoks.com: could not connect to host
 shadowsu.info: did not receive HSTS header
-shadowsu.top: could not connect to host
+shadowsu.top: did not receive HSTS header
 shagi29.ru: did not receive HSTS header
 shahbeat.com: did not receive HSTS header
 shakebox.de: could not connect to host
 shanesage.com: could not connect to host
 shapesedinburgh.co.uk: did not receive HSTS header
 shardsoft.com: could not connect to host
 shareeri.com: did not receive HSTS header
 shareimg.xyz: could not connect to host
@@ -10329,16 +10352,17 @@ sharepic.xyz: could not connect to host
 sharesplitter.com: could not connect to host
 sharezen.de: could not connect to host
 sharingcode.com: did not receive HSTS header
 shatorin.com: did not receive HSTS header
 shauncrowley.co.uk: could not connect to host
 shaunwheelhou.se: could not connect to host
 shawnbsmith.me: did not receive HSTS header
 shawnh.net: could not connect to host
+shawnstarrcustomhomes.com: did not receive HSTS header
 shellsec.pw: did not receive HSTS header
 shep.co.il: did not receive HSTS header
 sheratan.web.id: did not receive HSTS header
 shereallyheals.com: did not receive HSTS header
 shervik.ga: could not connect to host
 shevronpatriot.ru: did not receive HSTS header
 shg-pornographieabhaengigkeit.de: did not receive HSTS header
 shiatsu-institut.ch: did not receive HSTS header
@@ -10668,17 +10692,16 @@ srmaximo.com: could not connect to host
 srna.sk: did not receive HSTS header
 srpdb.com: did not receive HSTS header
 srrr.ca: could not connect to host
 ss-free.net: could not connect to host
 ss-x.ru: did not receive HSTS header
 ss.wtf: could not connect to host
 ssl.panoramio.com: did not receive HSTS header
 ssl.rip: could not connect to host
-sslsurvey.de: did not receive HSTS header
 sslzilla.de: did not receive HSTS header
 ssn1.ru: did not receive HSTS header
 sspanda.com: could not connect to host
 ssworld.ga: could not connect to host
 staack.com: could not connect to host
 stabletoken.com: could not connect to host
 staceyhankeinc.com: did not receive HSTS header
 stackfiles.io: could not connect to host
@@ -10696,16 +10719,17 @@ standingmist.com: did not receive HSTS h
 stannahtrapliften.nl: did not receive HSTS header
 starandshield.com: did not receive HSTS header
 starapple.nl: did not receive HSTS header
 starfeeling.net: could not connect to host
 stargatepartners.com: did not receive HSTS header
 starmusic.ga: could not connect to host
 startuponcloud.com: max-age too low: 2678400
 stash.ai: did not receive HSTS header
+stassi.ch: did not receive HSTS header
 state-sponsored-actors.net: could not connect to host
 statementinsertsforless.com: did not receive HSTS header
 stateofexception.io: could not connect to host
 static.or.at: did not receive HSTS header
 staticanime.net: could not connect to host
 stationaryjourney.com: did not receive HSTS header
 stationcharlie.com: could not connect to host
 stationnementdenuit.ca: did not receive HSTS header
@@ -10743,17 +10767,16 @@ stmbgr.com: could not connect to host
 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
 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
 store-host.com: did not receive HSTS header
 storecove.com: did not receive HSTS header
 storeden.com: did not receive HSTS header
 storefrontify.com: could not connect to host
 storiesofhealth.org: did not receive HSTS header
 stormhub.org: could not connect to host
@@ -10807,17 +10830,16 @@ sugarsweetorsour.com: did not receive HS
 suian.or.jp: max-age too low: 86400
 suite73.org: could not connect to host
 summitbankofkc.com: did not receive HSTS header
 summitmasters.net: did not receive HSTS header
 sumoatm.com: did not receive HSTS header
 sumoscout.de: could not connect to host
 suncountrymarine.com: did not receive HSTS header
 sundaycooks.com: max-age too low: 2592000
-sunflyer.cn: did not receive HSTS header
 sunlandsg.vn: did not receive HSTS header
 sunnyfruit.ru: could not connect to host
 sunshinepress.org: could not connect to host
 sunyanzi.tk: could not connect to host
 suos.io: could not connect to host
 supcro.com: could not connect to host
 super-garciniaslim.com: could not connect to host
 super-radiant-skin.com: could not connect to host
@@ -10853,17 +10875,17 @@ svadobkajuvi.sk: did not receive HSTS he
 svatba-frantovi.cz: could not connect to host
 svenluijten.com: did not receive HSTS header
 svenskaservern.se: could not connect to host
 svetjakonadlani.cz: did not receive HSTS header
 swaleacademiestrust.org.uk: max-age too low: 2592000
 swanseapartyhire.co.uk: did not receive HSTS header
 swdatlantico.pt: could not connect to host
 sweetstreats.ca: could not connect to host
-swiftconf.com: could not connect to host
+swiftconf.com: did not receive HSTS header
 swiggy.com: did not receive HSTS header
 swimming.ca: did not receive HSTS header
 swisstranslate.ch: did not receive HSTS header
 swisstranslate.fr: did not receive HSTS header
 swite.com: did not receive HSTS header
 swmd5c.org: could not connect to host
 swu.party: could not connect to host
 sxbk.pw: could not connect to host
@@ -11101,30 +11123,27 @@ thecapitalbank.com: did not receive HSTS
 thecharlestonwaldorf.com: did not receive HSTS header
 theclementinebutchers.com: could not connect to host
 thecloudrevolution.net: did not receive HSTS header
 theclubjersey.com: did not receive HSTS header
 thecodeninja.net: did not receive HSTS header
 thecoffeehouse.xyz: could not connect to host
 thedrinks.co: did not receive HSTS header
 thedrop.pw: did not receive HSTS header
-thedutchmarketers.com: did not receive HSTS header
 thedystance.com: could not connect to host
 theelitebuzz.com: could not connect to host
 theendofzion.com: did not receive HSTS header
 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
 thegamerscamp.com: max-age too low: 0
-thegemriverside.com.vn: could not connect to host
 thego2swatking.com: could not connect to host
 thegoldregister.co.uk: could not connect to host
 thegreenpark.co.uk: did not receive HSTS header
 thegreenvpn.com: did not receive HSTS header
 thehiddenbay.eu: could not connect to host
 thehiddenbay.me: max-age too low: 0
 thehiddenbay.net: max-age too low: 0
 thehighersideclothing.com: did not receive HSTS header
@@ -11159,16 +11178,17 @@ thesearchnerds.co.uk: did not receive HS
 thesecurityteam.net: could not connect to host
 theshopally.com: did not receive HSTS header
 thesplit.is: could not connect to host
 thestack.xyz: could not connect to host
 thestagchorleywood.co.uk: did not receive HSTS header
 thethirdroad.com: did not receive HSTS header
 thetradinghall.com: could not connect to host
 theurbanyoga.com: did not receive HSTS header
+theuucc.org: did not receive HSTS header
 thevintagenews.com: did not receive HSTS header
 thewallset.com: did not receive HSTS header
 thewebfellas.com: did not receive HSTS header
 theweilai.com: did not receive HSTS header
 theworkingeye.nl: could not connect to host
 thewp.pro: could not connect to host
 thezonders.com: did not receive HSTS header
 thgros.fr: could not connect to host
@@ -11207,16 +11227,17 @@ tianxing.pro: did not receive HSTS heade
 tianxingvpn.pro: could not connect to host
 ticketoplichting.nl: did not receive HSTS header
 tickopa.co.uk: could not connect to host
 tickreport.com: did not receive HSTS header
 ticktock.today: could not connect to host
 tictactux.de: could not connect to host
 tidmore.us: could not connect to host
 tie-online.org: did not receive HSTS header
+tielectric.ch: did not receive HSTS header
 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
 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 116"  data: no]
 tilikum.io: did not receive HSTS header
@@ -11490,20 +11511,19 @@ twinkseason.org: could not connect to ho
 twinkseason.xyz: could not connect to host
 twist.party: could not connect to host
 twogo.com: did not receive HSTS header
 twolinepassbrewing.com: could not connect to host
 twolivelife.com: could not connect to host
 tx041cap.org: did not receive HSTS header
 txbi.de: did not receive HSTS header
 txclimbers.com: could not connect to host
-txcp01.com: could not connect to host
-txcp02.com: could not connect to host
+txcp01.com: did not receive HSTS header
+txcp02.com: did not receive HSTS header
 txf.pw: could not connect to host
-ty2u.com: did not receive HSTS header
 tylian.net: max-age too low: 0
 typeofweb.com: did not receive HSTS header
 typingrevolution.com: did not receive HSTS header
 tyreis.com: did not receive HSTS header
 tyrelius.com: did not receive HSTS header
 tyroproducts.eu: did not receive HSTS header
 tyroremotes.no: did not receive HSTS header
 tyskland.guide: could not connect to host
@@ -11614,17 +11634,17 @@ 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
 urbpic.com: could not connect to host
 urlchomp.com: did not receive HSTS header
-urology.wiki: could not connect to host
+urology.wiki: 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: could not connect to host
 usbtypeccompliant.com: could not connect to host
 uscitizenship.info: did not receive HSTS header
 uscntalk.com: could not connect to host
@@ -11726,17 +11746,16 @@ venturepro.com: did not receive HSTS hea
 ventzke.com: did not receive HSTS header
 venzocrm.com: did not receive HSTS header
 verifiedinvesting.com: could not connect to host
 verifikatorindonesia.com: could not connect to host
 veristor.com: did not receive HSTS header
 vermontcareergateway.org: could not connect to host
 versia.ru: did not receive HSTS header
 veryhax.de: could not connect to host
-verzekeringsacties.nl: did not receive HSTS header
 vestacp.top: could not connect to host
 vetdnacenter.com: did not receive HSTS header
 veterinaire-cazeres-foucault.fr: could not connect to host
 vethouse.com.ua: did not receive HSTS header
 vetmgmt.com: could not connect to host
 veto.fish: could not connect to host
 vfree.org: could not connect to host
 vglimg.com: could not connect to host
@@ -11809,30 +11828,30 @@ vistarait.com: could not connect to host
 visualvotes.co.uk: could not connect to host
 vitagenda.nl: could not connect to host
 vitalita.cz: did not receive HSTS header
 vitalorange.com: max-age too low: 7889238
 vitsoft.by: did not receive HSTS header
 vitta.me: did not receive HSTS header
 viva-french.com: did not receive HSTS header
 vivasports.com.br: could not connect to host
-vivianmaier.cn: did not receive HSTS header
 vivocloud.com: could not connect to host
 vivremoinscher.fr: did not receive HSTS header
 vizeat.com: did not receive HSTS header
 vladimiroff.org: did not receive HSTS header
 vliegensvlug.services: max-age too low: 2592000
 vlora.city: could not connect to host
 vm0.eu: could not connect to host
 vmrdev.com: could not connect to host
 voceinveste.com: did not receive HSTS header
 voicesuk.co.uk: did not receive HSTS header
 voidserv.net: could not connect to host
 volbyzive.cz: did not receive HSTS header
 volcrado.com: did not receive HSTS header
+voliere-info.nl: did not receive HSTS header
 volkden.com: could not connect to host
 voltotc.com: did not receive HSTS header
 vonavy-cukor.sk: could not connect to host
 vonavycukor.sk: could not connect to host
 vonedelmann.de: did not receive HSTS header
 vonterra.us: did not receive HSTS header
 vooreenveiligthuis.nl: did not receive HSTS header
 voorjou.com: did not receive HSTS header
@@ -11928,16 +11947,17 @@ web-industry.fr: could not connect to ho
 web-insider.net: did not receive HSTS header
 web-vision.de: did not receive HSTS header
 web4all.fr: did not receive HSTS header
 web4pro.fr: could not connect to host
 webandwords.com.au: could not connect to host
 webanker.sh: did not receive HSTS header
 webapps.directory: could not connect to host
 webassadors.com: could not connect to host
+webaura.com: max-age too low: 0
 webbx.se: max-age too low: 2592000
 webchat.domains: did not receive HSTS header
 webdeflect.com: did not receive HSTS header
 webdesign-kronberg.de: did not receive HSTS header
 webdesignssussex.co.uk: did not receive HSTS header
 webdev-quiz.de: did not receive HSTS header
 webdev.mobi: could not connect to host
 webeconomia.it: did not receive HSTS header
@@ -11981,17 +12001,16 @@ weicn.org: did not receive HSTS header
 weightreviews.com: did not receive HSTS header
 weiji.ga: could not connect to host
 weiyuz.com: max-age too low: 6585555
 welkers.org: could not connect to host
 wellastore.ru: could not connect to host
 wellcomp.com.br: did not receive HSTS header
 wellies.com.au: max-age too low: 7889238
 wellness.so: could not connect to host
-wellopp.com: did not receive HSTS header
 wellproducedwines.com: did not receive HSTS header
 welpy.com: could not connect to host
 weltentreff.com: could not connect to host
 weltmeisterschaft.net: could not connect to host
 weme.eu: could not connect to host
 wendalyncheng.com: did not receive HSTS header
 wenz.io: did not receive HSTS header
 werdeeintimo.de: did not receive HSTS header
@@ -12112,31 +12131,29 @@ woodmafia.com.au: could not connect to h
 woodworkertip.com: did not receive HSTS header
 woording.com: could not connect to host
 wootton95.com: could not connect to host
 wooviet.com: could not connect to host
 wordbits.net: did not receive HSTS header
 work-and-jockel.de: did not receive HSTS header
 workfone.io: could not connect to host
 workpermit.com.vn: could not connect to host
-worksofwyoming.org: did not receive HSTS header
 worldlist.org: could not connect to host
 worldpovertysolutions.org: did not receive HSTS header
 worldsbeststory.com: did not receive HSTS header
 worldwhisperer.net: could not connect to host
 worshapp.com: could not connect to host
 wow-travel.eu: could not connect to host
 wowapi.org: could not connect to host
 wowinvasion.com: did not receive HSTS header
 wp-rescue.com.au: did not receive HSTS header
 wpblog.com.tw: could not connect to host
 wpcarer.pro: could not connect to host
 wpcharged.nz: did not receive HSTS header
 wpfortify.com: could not connect to host
-wpg-inc.com: did not receive HSTS header
 wphome.org: could not connect to host
 wphostingspot.com: did not receive HSTS header
 wplatin.com: could not connect to host
 wpmetadatastandardsproject.org: could not connect to host
 wpruby.com: did not receive HSTS header
 wpunpacked.com: could not connect to host
 wpyecom.es: did not receive HSTS header
 wpzhiku.com: did not receive HSTS header
@@ -12234,17 +12251,16 @@ xiaolvmu.me: could not connect to host
 xiaoxiao.im: could not connect to host
 xiliant.com: did not receive HSTS header
 ximage.me: did not receive HSTS header
 ximens.me: could not connect to host
 xinbiji.cn: could not connect to host
 xinghuokeji.xin: could not connect to host
 xisa.it: could not connect to host
 xivpn.com: could not connect to host
-xiyu.moe: did not receive HSTS header
 xlboo.com: did not receive HSTS header
 xlfblog.com: did not receive HSTS header
 xlinar.com: did not receive HSTS header
 xmr.my: could not connect to host
 xmv.cz: could not connect to host
 xn--3lqp21gwna.xn--fiqs8s: could not connect to host
 xn--3lqp21gwna.xn--fiqz9s: could not connect to host
 xn--3lqt7ir4md4tzwa.cn: did not receive HSTS header
@@ -12361,17 +12377,17 @@ yoiyado.info: did not receive HSTS heade
 yokeepo.com: could not connect to host
 yoloboatrentals.com: did not receive HSTS header
 yolocelebs.com: did not receive HSTS header
 yoloprod.fr: could not connect to host
 yoloseo.com: could not connect to host
 yomepre.com: could not connect to host
 yopers.com: did not receive HSTS header
 yoru.me: could not connect to host
-youcaitian.com: could not connect to host
+youcaitian.com: did not receive HSTS header
 youcontrol.ru: could not connect to host
 youfencun.com: did not receive HSTS header
 youlog.net: could not connect to host
 youngandunited.nl: did not receive HSTS header
 youon.tokyo: could not connect to host
 yourbapp.ch: could not connect to host
 yourcomputer.expert: did not receive HSTS header
 yourgame.co.il: did not receive HSTS header
@@ -12396,31 +12412,34 @@ yuntama.xyz: could not connect to host
 yunzhan.io: did not receive HSTS header
 yunzhu.org: could not connect to host
 yuriykuzmin.com: did not receive HSTS header
 yutabon.com: could not connect to host