Backed out 7 changesets (bug 1492582) for causing ss mochitest failures CLOSED TREE
authorNoemi Erli <nerli@mozilla.com>
Thu, 07 Nov 2019 21:51:46 +0200
changeset 501166 1f8651278127b1431c8dbec4cac0eba4e2a0f046
parent 501165 ce6090991688a3e70c0c414690704e13c42107be
child 501167 d3312cfcb08b8c5593860a9b5d5e7dc3e071d358
push id100029
push usernerli@mozilla.com
push dateThu, 07 Nov 2019 21:26:10 +0000
treeherderautoland@1f8651278127 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1492582
milestone72.0a1
backs out1484255e5f4df32ea381c58669ed22545a70d4a7
bbf62ef50e529b304b8fab6a211cd244ff0291f1
836724d3860e8d7d41588bd51dc042242a1dc160
5efddfd196b5c4b61e166ae183b3cce8b0699ba3
d4be1aa8cdb6189649fb09e812fc3ca0aa2bf83e
f05dfbeff17b6fcad6815daa15e35c6f6d7b0792
e0e56a195659d800f8583bc5b8ea4f18c21e9ae5
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
Backed out 7 changesets (bug 1492582) for causing ss mochitest failures CLOSED TREE Backed out changeset 1484255e5f4d (bug 1492582) Backed out changeset bbf62ef50e52 (bug 1492582) Backed out changeset 836724d3860e (bug 1492582) Backed out changeset 5efddfd196b5 (bug 1492582) Backed out changeset d4be1aa8cdb6 (bug 1492582) Backed out changeset f05dfbeff17b (bug 1492582) Backed out changeset e0e56a195659 (bug 1492582)
browser/base/content/browser.css
browser/base/content/browser.js
browser/base/content/browser.xhtml
browser/base/content/tabbrowser.js
browser/base/content/test/general/browser_homeDrop.js
browser/base/content/test/general/browser_newTabDrop.js
browser/base/content/test/general/browser_newWindowDrop.js
browser/base/content/test/general/browser_tabfocus.js
browser/components/privatebrowsing/test/browser/browser_privatebrowsing_windowtitle.js
browser/themes/linux/browser.css
browser/themes/osx/browser.css
browser/themes/windows/browser.css
browser/themes/windows/compacttheme.css
devtools/server/actors/highlighters/utils/markup.js
devtools/server/tests/mochitest/test_styles-applied.html
dom/base/Document.cpp
dom/xul/test/mochitest.ini
dom/xul/test/test_disable_scroll_frame_plain.html
layout/base/nsCSSFrameConstructor.cpp
toolkit/content/xul.css
toolkit/themes/shared/findBar.inc.css
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -1,43 +1,25 @@
 /* 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/. */
 
 @namespace html url("http://www.w3.org/1999/xhtml");
 
-:root,
-body {
-  margin: 0;
-  padding: 0;
-  height: 100%;
-  width: 100%;
-  overflow: -moz-hidden-unscrollable;
-}
-
 :root {
-  text-rendering: optimizeLegibility;
-  min-height: 95px;
-  min-width: 95px;
-
-  /* variables */
   --panelui-subview-transition-duration: 150ms;
   --lwt-additional-images: none;
   --lwt-background-alignment: right top;
   --lwt-background-tiling: no-repeat;
 
   --toolbar-bgcolor: var(--toolbar-non-lwt-bgcolor);
   --toolbar-bgimage: var(--toolbar-non-lwt-bgimage);
   --toolbar-color: var(--toolbar-non-lwt-textcolor);
 }
 
-:root:-moz-locale-dir(rtl) {
-  direction: rtl;
-}
-
 :root:-moz-lwtheme {
   --toolbar-bgcolor: rgba(255,255,255,.4);
   --toolbar-bgimage: none;
   --toolbar-color: var(--lwt-text-color, inherit);
 
   background-color: var(--lwt-accent-color);
   color: var(--lwt-text-color);
 }
@@ -47,22 +29,16 @@ body {
   background-repeat: no-repeat;
   background-position: right top !important;
 }
 
 :root:-moz-lwtheme:-moz-window-inactive {
   background-color: var(--lwt-accent-color-inactive, var(--lwt-accent-color));
 }
 
-body {
-  display: -moz-box;
-  -moz-box-orient: vertical;
-  -moz-box-flex: 1;
-}
-
 /* Set additional backgrounds alignment relative to toolbox */
 
 #navigator-toolbox:-moz-lwtheme {
   background-image: var(--lwt-additional-images);
   background-position: var(--lwt-background-alignment);
   background-repeat: var(--lwt-background-tiling);
 }
 
@@ -136,16 +112,17 @@ panelview[mainview] > .panel-header {
   transition-property: height;
   transition-timing-function: var(--animation-easing-function);
   transition-duration: var(--panelui-subview-transition-duration);
   will-change: height;
 }
 
 .panel-viewcontainer.offscreen {
   display: block;
+  position: absolute;
 }
 
 .panel-viewstack {
   overflow: visible;
   transition: height var(--panelui-subview-transition-duration);
 }
 
 @supports -moz-bool-pref("layout.css.emulate-moz-box-with-flex") {
@@ -276,17 +253,17 @@ toolbar:not([overflowing]) > .overflow-b
 toolbar[customizing] > .overflow-button {
   display: none;
 }
 
 toolbar[customizing] #whats-new-menu-button {
   display: none;
 }
 
-:root:not([chromehidden~="toolbar"]) #nav-bar[nonemptyoverflow] > .overflow-button,
+window:not([chromehidden~="toolbar"]) #nav-bar[nonemptyoverflow] > .overflow-button,
 #nav-bar[customizing] > .overflow-button {
   display: -moz-box;
 }
 
 /* The ids are ugly, but this should be reasonably performant, and
  * using a tagname as the last item would be less so.
  */
 #widget-overflow-list:empty + #widget-overflow-fixed-separator,
@@ -836,17 +813,18 @@ toolbarspring {
   }
 }
 
 menupopup[emptyplacesresult="true"] > .hide-if-empty-places-result {
   display: none;
 }
 
 /* Hide extension toolbars that neglected to set the proper class */
-:root[chromehidden~="location"][chromehidden~="toolbar"] toolbar:not(.chromeclass-menubar) {
+window[chromehidden~="location"][chromehidden~="toolbar"] toolbar:not(.chromeclass-menubar),
+window[chromehidden~="toolbar"] toolbar:not(#nav-bar):not(#TabsToolbar):not(#print-preview-toolbar):not(.chromeclass-menubar) {
   display: none;
 }
 
 #navigator-toolbox ,
 #mainPopupSet {
   min-width: 1px;
 }
 
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -8615,17 +8615,20 @@ var gPrivateBrowsingUI = {
 
     if (window.location.href != AppConstants.BROWSER_CHROME_URL) {
       return;
     }
 
     // Adjust the window's title
     let docElement = document.documentElement;
     if (!PrivateBrowsingUtils.permanentPrivateBrowsing) {
-      docElement.title = docElement.getAttribute("title_privatebrowsing");
+      docElement.setAttribute(
+        "title",
+        docElement.getAttribute("title_privatebrowsing")
+      );
       docElement.setAttribute(
         "titlemodifier",
         docElement.getAttribute("titlemodifier_privatebrowsing")
       );
     }
     docElement.setAttribute(
       "privatebrowsingmode",
       PrivateBrowsingUtils.permanentPrivateBrowsing ? "permanent" : "temporary"
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -31,22 +31,23 @@
 <?xml-stylesheet href="chrome://browser/skin/places/editBookmark.css" type="text/css"?>
 
 # All DTD information is stored in a separate file so that it can be shared by
 # hiddenWindowMac.xhtml.
 <!DOCTYPE window [
 #include browser-doctype.inc
 ]>
 
-<html id="main-window"
+<window id="main-window"
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:svg="http://www.w3.org/2000/svg"
         xmlns:html="http://www.w3.org/1999/xhtml"
         xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-        xmlns="http://www.w3.org/1999/xhtml"
+        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+        title="&mainWindow.title;"
         title_normal="&mainWindow.title;"
 #ifdef XP_MACOSX
         title_privatebrowsing="&mainWindow.title;&mainWindow.titlemodifiermenuseparator;&mainWindow.titlePrivateBrowsingSuffix;"
         titledefault="&mainWindow.title;"
         titlemodifier=""
         titlemodifier_normal=""
         titlemodifier_privatebrowsing="&mainWindow.titlePrivateBrowsingSuffix;"
 #else
@@ -63,29 +64,28 @@
         tabsintitlebar="true"
         titlemenuseparator="&mainWindow.titlemodifiermenuseparator;"
         windowtype="navigator:browser"
         macanimationtype="document"
         screenX="4" screenY="4"
         fullscreenbutton="true"
         sizemode="normal"
         retargetdocumentfocus="urlbar-input"
-        scrolling="false"
         persist="screenX screenY width height sizemode"
         data-l10n-sync="true">
-<head>
-  <link rel="localization" href="branding/brand.ftl"/>
-  <link rel="localization" href="browser/branding/sync-brand.ftl"/>
-  <link rel="localization" href="browser/browser.ftl"/>
-  <link rel="localization" href="browser/menubar.ftl"/>
-  <link rel="localization" href="browser/protectionsPanel.ftl"/>
-  <link rel="localization" href="browser/appmenu.ftl"/>
-  <link rel="localization" href="browser/readerView.ftl"/>
 
-  <title>&mainWindow.title;</title>
+<linkset>
+  <html:link rel="localization" href="branding/brand.ftl"/>
+  <html:link rel="localization" href="browser/branding/sync-brand.ftl"/>
+  <html:link rel="localization" href="browser/browser.ftl"/>
+  <html:link rel="localization" href="browser/menubar.ftl"/>
+  <html:link rel="localization" href="browser/protectionsPanel.ftl"/>
+  <html:link rel="localization" href="browser/appmenu.ftl"/>
+  <html:link rel="localization" href="browser/readerView.ftl"/>
+</linkset>
 
 # All JS files which are needed by browser.xhtml and other top level windows to
 # support MacOS specific features *must* go into the global-scripts.inc file so
 # that they can be shared with macWindow.inc.xul.
 #include global-scripts.inc
 
 <script>
   /* eslint-env mozilla/browser-window */
@@ -117,22 +117,22 @@
 
   // The listener of DOMContentLoaded must be set on window, rather than
   // document, because the window can go away before the event is fired.
   // In that case, we don't want to initialize anything, otherwise we
   // may be leaking things because they will never be destroyed after.
   window.addEventListener("DOMContentLoaded",
     gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true });
 </script>
-</head>
-<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
 # All sets except for popupsets (commands, keys, and stringbundles)
 # *must* go into the browser-sets.inc file so that they can be shared with other
 # top level windows in macWindow.inc.xul.
 #include browser-sets.inc
+
   <popupset id="mainPopupSet">
     <menupopup id="tabContextMenu"
                onpopupshowing="if (event.target == this) TabContextMenu.updateContextMenu(this);"
                onpopuphidden="if (event.target == this) TabContextMenu.contextTab = null;">
       <menuitem id="context_reloadTab" data-lazy-l10n-id="reload-tab"
                 oncommand="gBrowser.reloadTab(TabContextMenu.contextTab);"/>
       <menuitem id="context_reloadSelectedTabs" data-lazy-l10n-id="reload-tabs" hidden="true"
                 oncommand="gBrowser.reloadMultiSelectedTabs();"/>
@@ -1413,10 +1413,9 @@
 # attribute, or it will fail to render properly in WebRender.
 #include popovers.inc
 
   <vbox id="browser-bottombox" layer="true" renderroot="content">
     <!-- gNotificationBox will be added here lazily. -->
   </vbox>
 
   <html:div id="a11y-announcement" role="alert"/>
-</html:body>
-</html>
+</window>
--- a/browser/base/content/tabbrowser.js
+++ b/browser/base/content/tabbrowser.js
@@ -967,17 +967,17 @@
       }
 
       if (!docTitle) {
         docTitle = docElement.getAttribute("titledefault");
       }
 
       var modifier = docElement.getAttribute("titlemodifier");
       if (docTitle) {
-        newTitle += docElement.getAttribute("titlepreface") || "";
+        newTitle += docElement.getAttribute("titlepreface");
         newTitle += docTitle;
         if (modifier) {
           newTitle += sep;
         }
       }
       newTitle += modifier;
 
       // If location bar is hidden and the URL type supports a host,
@@ -1353,17 +1353,20 @@
         this.selectedTab._findBarFocused
       ) {
         gFindBar._findField.focus();
         return;
       }
 
       // Don't focus the content area if something has been focused after the
       // tab switch was initiated.
-      if (gMultiProcessBrowser && document.activeElement != document.body) {
+      if (
+        gMultiProcessBrowser &&
+        document.activeElement != document.documentElement
+      ) {
         return;
       }
 
       // We're now committed to focusing the content area.
       let fm = Services.focus;
       let focusFlags = fm.FLAG_NOSCROLL;
 
       if (!gMultiProcessBrowser) {
--- a/browser/base/content/test/general/browser_homeDrop.js
+++ b/browser/base/content/test/general/browser_homeDrop.js
@@ -7,20 +7,19 @@ add_task(async function() {
   await pushPrefs([HOMEPAGE_PREF, "about:mozilla"]);
 
   let EventUtils = {};
   Services.scriptloader.loadSubScript(
     "chrome://mochikit/content/tests/SimpleTest/EventUtils.js",
     EventUtils
   );
 
-  // Since synthesizeDrop triggers the srcElement, need to use another button
-  // that should be visible.
-  let dragSrcElement = document.getElementById("sidebar-button");
-  ok(dragSrcElement, "Sidebar button exists");
+  // Since synthesizeDrop triggers the srcElement, need to use another button.
+  let dragSrcElement = document.getElementById("downloads-button");
+  ok(dragSrcElement, "Downloads button exists");
   let homeButton = document.getElementById("home-button");
   ok(homeButton, "home button present");
 
   async function drop(dragData, homepage) {
     let setHomepageDialogPromise = BrowserTestUtils.domWindowOpened();
 
     EventUtils.synthesizeDrop(
       dragSrcElement,
--- a/browser/base/content/test/general/browser_newTabDrop.js
+++ b/browser/base/content/test/general/browser_newTabDrop.js
@@ -204,20 +204,19 @@ async function drop(dragData, expectedUR
     }`
   );
   let EventUtils = {};
   Services.scriptloader.loadSubScript(
     "chrome://mochikit/content/tests/SimpleTest/EventUtils.js",
     EventUtils
   );
 
-  // Since synthesizeDrop triggers the srcElement, need to use another button
-  // that should be visible.
-  let dragSrcElement = document.getElementById("sidebar-button");
-  ok(dragSrcElement, "Sidebar button exists");
+  // Since synthesizeDrop triggers the srcElement, need to use another button.
+  let dragSrcElement = document.getElementById("downloads-button");
+  ok(dragSrcElement, "Downloads button exists");
   let newTabButton = document.getElementById("new-tab-button");
   ok(newTabButton, "New Tab button exists");
 
   let awaitDrop = BrowserTestUtils.waitForEvent(newTabButton, "drop");
 
   let loadedPromises = expectedURLs.map(url =>
     BrowserTestUtils.waitForNewTab(gBrowser, url, false, true)
   );
--- a/browser/base/content/test/general/browser_newWindowDrop.js
+++ b/browser/base/content/test/general/browser_newWindowDrop.js
@@ -191,20 +191,19 @@ async function drop(dragData, expectedUR
     }`
   );
   let EventUtils = {};
   Services.scriptloader.loadSubScript(
     "chrome://mochikit/content/tests/SimpleTest/EventUtils.js",
     EventUtils
   );
 
-  // Since synthesizeDrop triggers the srcElement, need to use another button
-  // that should be visible.
-  let dragSrcElement = document.getElementById("sidebar-button");
-  ok(dragSrcElement, "Sidebar button exists");
+  // Since synthesizeDrop triggers the srcElement, need to use another button.
+  let dragSrcElement = document.getElementById("downloads-button");
+  ok(dragSrcElement, "Downloads button exists");
   let newWindowButton = document.getElementById("new-window-button");
   ok(newWindowButton, "New Window button exists");
 
   let tmp = {};
   ChromeUtils.import("resource://testing-common/TestUtils.jsm", tmp);
 
   let awaitDrop = BrowserTestUtils.waitForEvent(newWindowButton, "drop");
 
--- a/browser/base/content/test/general/browser_tabfocus.js
+++ b/browser/base/content/test/general/browser_tabfocus.js
@@ -671,21 +671,16 @@ function compareFocusResults() {
     if (gMultiProcessBrowser) {
       is(_expectedWindow, "main-window", "main-window is always expected");
     } else if (_expectedWindow != "main-window") {
       matchWindow =
         _expectedWindow == "window1"
           ? browser1.contentWindow
           : browser2.contentWindow;
     }
-    if (_expectedWindow == "main-window") {
-      // The browser window's body doesn't have an id set usually - set one now
-      // so it can be used for id comparisons below.
-      matchWindow.document.body.id = "main-window-body";
-    }
 
     var focusedElement = fm.focusedElement;
     is(
       getId(focusedElement),
       _expectedElement,
       currentTestName + " focusedElement"
     );
     is(fm.focusedWindow, matchWindow, currentTestName + " focusedWindow");
@@ -698,17 +693,23 @@ function compareFocusResults() {
     is(
       focusedWindow.value,
       matchWindow,
       currentTestName + " getFocusedElementForWindow frame"
     );
     is(matchWindow.document.hasFocus(), true, currentTestName + " hasFocus");
     var expectedActive = _expectedElement;
     if (!expectedActive) {
-      expectedActive = getId(matchWindow.document.body);
+      // Documents that have a XUL document element currently have a different
+      // active element behavior than regular HTML documents. This test will
+      // need to be updated when bug 1492582 is fixed.
+      expectedActive =
+        matchWindow.document.documentElement instanceof XULElement
+          ? "main-window"
+          : getId(matchWindow.document.body);
     }
     is(
       getId(matchWindow.document.activeElement),
       expectedActive,
       currentTestName + " activeElement"
     );
 
     currentPromiseResolver();
--- a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_windowtitle.js
+++ b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_windowtitle.js
@@ -8,17 +8,17 @@
 add_task(async function test() {
   const testPageURL =
     "http://mochi.test:8888/browser/" +
     "browser/components/privatebrowsing/test/browser/browser_privatebrowsing_windowtitle_page.html";
   requestLongerTimeout(2);
 
   // initialization of expected titles
   let test_title = "Test title";
-  let app_name = document.title;
+  let app_name = document.documentElement.getAttribute("title");
   const isOSX = "nsILocalFileMac" in Ci;
   let page_with_title;
   let page_without_title;
   let about_pb_title;
   let pb_page_with_title;
   let pb_page_without_title;
   let pb_about_pb_title;
   if (isOSX) {
--- a/browser/themes/linux/browser.css
+++ b/browser/themes/linux/browser.css
@@ -476,23 +476,23 @@ notification[value="translation"] menuli
    * See nsWindow::TopLevelWindowUseARGBVisual() for details. */
   @media (-moz-gtk-csd-transparent-background) {
     :root[tabsintitlebar][sizemode="normal"]:not(:-moz-lwtheme) {
       background-color: transparent;
       -moz-appearance: none;
     }
   }
 
-  :root[tabsintitlebar] #navigator-toolbox > #titlebar {
+  :root[tabsintitlebar] > #navigator-toolbox > #titlebar {
     -moz-appearance: -moz-window-titlebar-maximized;
   }
-  :root[tabsintitlebar][sizemode="normal"]:not([gtktiledwindow="true"]) #navigator-toolbox > #titlebar {
+  :root[tabsintitlebar][sizemode="normal"]:not([gtktiledwindow="true"]) > #navigator-toolbox > #titlebar {
     -moz-appearance: -moz-window-titlebar;
   }
-  :root[tabsintitlebar]:not([inDOMFullscreen]) #navigator-toolbox > #titlebar:-moz-lwtheme {
+  :root[tabsintitlebar]:not([inDOMFullscreen]) > #navigator-toolbox > #titlebar:-moz-lwtheme {
     visibility: hidden;
   }
   :root[tabsintitlebar]:not([inDOMFullscreen]) #toolbar-menubar:-moz-lwtheme,
   :root[tabsintitlebar]:not([inDOMFullscreen]) #TabsToolbar:-moz-lwtheme {
     visibility: visible;
   }
 
   /* When temporarily showing the menu bar, make it at least as tall as the tab
--- a/browser/themes/osx/browser.css
+++ b/browser/themes/osx/browser.css
@@ -55,17 +55,18 @@
   bottom border. We cannot put this property on the toolbox itself as it
   cancels all backgrounds that are there, so we set it on the toolbox bottom
   border.
 */
 #navigator-toolbox::after {
   content: "";
   display: -moz-box;
   -moz-appearance: toolbox;
-  height: 0;
+  height: 1px;
+  margin-top: -1px;
   opacity: 0.001;
 }
 
 #tabbrowser-tabs {
   --tab-line-color: #0a84ff;
 }
 
 #navigator-toolbox toolbarbutton:-moz-lwtheme {
--- a/browser/themes/windows/browser.css
+++ b/browser/themes/windows/browser.css
@@ -247,21 +247,21 @@
 }
 
 #browser-bottombox:not(:-moz-lwtheme) {
   background-color: -moz-dialog;
 }
 
 /* ::::: titlebar ::::: */
 
-#main-window[tabsintitlebar][sizemode="normal"] #navigator-toolbox > #titlebar {
+#main-window[tabsintitlebar][sizemode="normal"] > #navigator-toolbox > #titlebar {
   -moz-appearance: -moz-window-titlebar;
 }
 
-#main-window[tabsintitlebar][sizemode="maximized"] #navigator-toolbox > #titlebar {
+#main-window[tabsintitlebar][sizemode="maximized"] > #navigator-toolbox > #titlebar {
   -moz-appearance: -moz-window-titlebar-maximized;
 }
 
 @media (-moz-windows-compositor: 0) {
   /**
    * Anytime we're not using the compositor on Windows, the -moz-window-titlebar
    * and -moz-window-titlebar-maximized values for -moz-appearance override
    * backgrounds supplied by lwthemes. We make the #titlebar itself hidden, but
@@ -273,17 +273,17 @@
   }
   :root:not([inDOMFullscreen]) #toolbar-menubar:-moz-lwtheme,
   :root:not([inDOMFullscreen]) #TabsToolbar:-moz-lwtheme {
     visibility: visible;
   }
 }
 
 @media (-moz-windows-classic) {
-  #main-window[tabsintitlebar][sizemode="normal"] #navigator-toolbox > #titlebar > #toolbar-menubar {
+  #main-window[tabsintitlebar][sizemode="normal"] > #navigator-toolbox > #titlebar > #toolbar-menubar {
     margin-top: 4px;
   }
 }
 
 .titlebar-buttonbox {
   /* For all Windows configurations except for Windows Aero and Windows Aero Basic,
    * the default -moz-appearance of -moz-window-button-box and
    * -moz-window-button-box-maximized adds unwanted margins to the button box. We
--- a/browser/themes/windows/compacttheme.css
+++ b/browser/themes/windows/compacttheme.css
@@ -5,17 +5,17 @@
 %include ../shared/compacttheme.inc.css
 
 /* The window background is white due to no accentcolor in the lightweight
    theme. It can't be changed to transparent when there is no compositor
    (Win 7 in classic / basic theme), or else dragging and focus become
    broken. So instead just show the normal titlebar in that case, and override
    the window color as transparent when the compositor is available. */
 @media (-moz-windows-compositor: 0) {
-  :root[tabsintitlebar]:not([inDOMFullscreen]) > body > #navigator-toolbox > #titlebar:-moz-lwtheme {
+  :root[tabsintitlebar]:not([inDOMFullscreen]) > #navigator-toolbox > #titlebar:-moz-lwtheme {
     visibility: visible;
   }
 
   /* Prevent accent color overriding the window background for
    * light and dark theme on Aero Basic. This is copied from browser-aero.css. */
   @media (-moz-windows-default-theme) {
     :root {
       background-color: rgb(185,209,234) !important;
--- a/devtools/server/actors/highlighters/utils/markup.js
+++ b/devtools/server/actors/highlighters/utils/markup.js
@@ -97,24 +97,17 @@ ClassList.prototype = {
 };
 
 /**
  * Is this content window a XUL window?
  * @param {Window} window
  * @return {Boolean}
  */
 function isXUL(window) {
-  // XXX: We temporarily return true for HTML documents if the document disables
-  // scroll frames since the regular highlighter is broken in this case. This
-  // should be removed when bug 1594587 is fixed.
-  return (
-    window.document.documentElement.namespaceURI === XUL_NS ||
-    (window.isChromeWindow &&
-      window.document.documentElement.getAttribute("scrolling") === "false")
-  );
+  return window.document.documentElement.namespaceURI === XUL_NS;
 }
 exports.isXUL = isXUL;
 
 /**
  * Returns true if a DOM node is "valid", where "valid" means that the node isn't a dead
  * object wrapper, is still attached to a document, and is of a given type.
  * @param {DOMNode} node
  * @param {Number} nodeType Optional, defaults to ELEMENT_NODE
--- a/devtools/server/tests/mochitest/test_styles-applied.html
+++ b/devtools/server/tests/mochitest/test_styles-applied.html
@@ -77,17 +77,17 @@ addTest(function inheritedSystemStyles()
     // If our system stylesheets are prone to churn, this might be a fragile
     // test.  If you're here because of that I apologize, file a bug
     // and we can find a different way to test.
 
     ok(!applied[1].inherited, "Entry 1 should not be inherited");
     ok(!applied[1].rule.parentStyleSheet.system, "Entry 1 should be a system style");
     is(applied[1].rule.type, 1, "Entry 1 should be a rule style");
 
-    is(applied.length, 13, "Should have 13 rules.");
+    is(applied.length, 12, "Should have 12 rules.");
   }).then(runNextTest));
 });
 
 addTest(function noInheritedStyles() {
   promiseDone(gWalker.querySelector(gWalker.rootNode, "#test-node").then(node => {
     return gStyles.getApplied(node, { inherited: false, filter: "user" });
   }).then(applied => {
     ok(!applied[0].inherited, "Entry 0 should be uninherited");
--- a/dom/base/Document.cpp
+++ b/dom/base/Document.cpp
@@ -5679,19 +5679,19 @@ Element* Document::GetActiveElement() {
   }
 
   // No focused element anywhere in this document.  Try to get the BODY.
   if (IsHTMLOrXHTML()) {
     Element* bodyElement = AsHTMLDocument()->GetBody();
     if (bodyElement) {
       return bodyElement;
     }
-    // Special case to handle the transition to XHTML from XUL documents
-    // where there currently isn't a body element, but we need to match the
-    // XUL behavior. This should be removed when bug 1540278 is resolved.
+    // Special case to handle the transition to browser.xhtml where there is
+    // currently not a body element, but we need to match the XUL behavior.
+    // This should be removed when bug 1492582 is resolved.
     if (nsContentUtils::IsChromeDoc(this)) {
       Element* docElement = GetDocumentElement();
       if (docElement && docElement->IsXULElement()) {
         return docElement;
       }
     }
     // Because of IE compatibility, return null when html document doesn't have
     // a body.
--- a/dom/xul/test/mochitest.ini
+++ b/dom/xul/test/mochitest.ini
@@ -1,6 +1,4 @@
 [DEFAULT]
 
 [test_bug486990.xhtml]
 skip-if = toolkit == 'android' #TIMED_OUT
-
-[test_disable_scroll_frame_plain.html]
deleted file mode 100644
--- a/dom/xul/test/test_disable_scroll_frame_plain.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE HTML>
-<html scrolling="false">
-<head>
-  <meta charset="utf-8">
-  <title>disable scroll frame exposed</title>
-  <script src="/tests/SimpleTest/SimpleTest.js"></script>
-  <link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
-</head>
-<body>
-<p id="display"></p>
-<div id="content" style="display: none"></div>
-<pre id="test"></pre>
-<div style="height: 300vh"></div>
-<script>
-  // Ensure that disabling the scroll frame isn't exposed to content.
-  ok(document.scrollingElement.scrollTopMax > 0, "Scrolling should still work.");
-</script>
-</body>
-</html>
--- a/layout/base/nsCSSFrameConstructor.cpp
+++ b/layout/base/nsCSSFrameConstructor.cpp
@@ -2548,29 +2548,19 @@ void nsCSSFrameConstructor::SetUpDocElem
 
   bool isHTML = aDocElement->IsHTMLElement();
   bool isXUL = false;
 
   if (!isHTML) {
     isXUL = aDocElement->IsXULElement();
   }
 
-  // Never create scrollbars for XUL documents or top level XHTML documents that
-  // disable scrolling.
-  bool isScrollable = true;
-  if (isPaginated) {
-    isScrollable = presContext->HasPaginatedScrolling();
-  } else if (isXUL) {
-    isScrollable = false;
-  } else if (nsContentUtils::IsInChromeDocshell(aDocElement->OwnerDoc()) &&
-             aDocElement->AsElement()->AttrValueIs(
-                 kNameSpaceID_None, nsGkAtoms::scrolling, nsGkAtoms::_false,
-                 eCaseMatters)) {
-    isScrollable = false;
-  }
+  // Never create scrollbars for XUL documents
+  bool isScrollable =
+      isPaginated ? presContext->HasPaginatedScrolling() : !isXUL;
 
   // We no longer need to do overflow propagation here. It's taken care of
   // when we construct frames for the element whose overflow might be
   // propagated
   NS_ASSERTION(!isScrollable || !isXUL,
                "XUL documents should never be scrollable - see above");
 
   nsContainerFrame* newFrame = rootFrame;
--- a/toolkit/content/xul.css
+++ b/toolkit/content/xul.css
@@ -19,44 +19,38 @@
  * HAVING YOUR CHANGES REVIEWED BY enndeakin@gmail.com
  */
 
 @import url("chrome://global/skin/tooltip.css");
 
 @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* set default namespace to XUL */
 @namespace html url("http://www.w3.org/1999/xhtml"); /* namespace for HTML elements */
 
-/* TODO: investigate unifying these two root selectors
- * https://bugzilla.mozilla.org/show_bug.cgi?id=1592344
- */
-*|*:root {
-  --animation-easing-function: cubic-bezier(.07, .95, 0, 1);
-}
-
 :root {
   text-rendering: optimizeLegibility;
   -moz-control-character-visibility: visible;
+  --animation-easing-function: cubic-bezier(.07, .95, 0, 1);
 }
 
 :root:-moz-locale-dir(rtl) {
   direction: rtl;
 }
 
 /* ::::::::::
    :: Rules for 'hiding' portions of the chrome for special
    :: kinds of windows (not JUST browser windows) with toolbars
    ::::: */
 
-*|*:root[chromehidden~="menubar"] .chromeclass-menubar,
-*|*:root[chromehidden~="directories"] .chromeclass-directories,
-*|*:root[chromehidden~="status"] .chromeclass-status,
-*|*:root[chromehidden~="extrachrome"] .chromeclass-extrachrome,
-*|*:root[chromehidden~="location"] .chromeclass-location,
-*|*:root[chromehidden~="location"][chromehidden~="toolbar"] .chromeclass-toolbar,
-*|*:root[chromehidden~="toolbar"] .chromeclass-toolbar-additional {
+window[chromehidden~="menubar"] .chromeclass-menubar,
+window[chromehidden~="directories"] .chromeclass-directories,
+window[chromehidden~="status"] .chromeclass-status,
+window[chromehidden~="extrachrome"] .chromeclass-extrachrome,
+window[chromehidden~="location"] .chromeclass-location,
+window[chromehidden~="location"][chromehidden~="toolbar"] .chromeclass-toolbar,
+window[chromehidden~="toolbar"] .chromeclass-toolbar-additional {
   display: none;
 }
 
 /* ::::::::::
    :: Rules for forcing direction for entry and display of URIs
    :: or URI elements
    ::::: */
 
--- a/toolkit/themes/shared/findBar.inc.css
+++ b/toolkit/themes/shared/findBar.inc.css
@@ -36,17 +36,17 @@ findbar[noanim] {
 .findbar-closebutton {
   padding: 0 8px;
 }
 
 /* Search field */
 
 /* Don't apply theme colors on findbar when header image is applied to avoid
 contrast issues, see bug 1506913 */
-html|html[lwtheme-image] findbar {
+:root[lwtheme-image] findbar {
   --lwt-toolbar-field-background-color: initial;
   --lwt-toolbar-field-color: initial;
   --lwt-toolbar-field-border-color: initial;
   --lwt-toolbar-field-focus: initial;
   --lwt-toolbar-field-focus-color: initial;
 }
 
 html|input.findbar-textbox {