Merge autoland to m-c, a=merge
authorPhil Ringnalda <philringnalda@gmail.com>
Sat, 27 May 2017 21:28:38 -0700
changeset 361022 ee96ce3c71b79064efe8ab2c7ff35e6b6220a475
parent 361017 35099b4caec14bf0e3c5e3fed7a17dd3faf51dbe (current diff)
parent 361005 5246b79016cc5ce2ab6765cc8bab460ee6c495da (diff)
child 361023 6a235092bda7c20cb83651d3404284fe36d04c1b
push id43589
push userphilringnalda@gmail.com
push dateSun, 28 May 2017 04:34:46 +0000
treeherderautoland@89357ce3b812 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone55.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 autoland to m-c, a=merge MozReview-Commit-ID: 4AKIgYeFhIc
testing/mozharness/mozharness/mozilla/mitmproxy.py
testing/talos/mitmproxy_requirements.txt
testing/talos/python3.manifest
testing/talos/python3_x64.manifest
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -1580,17 +1580,16 @@ pref("dom.ipc.processPrelaunch.enabled",
 pref("browser.migrate.automigrate.enabled", true);
 #else
 pref("browser.migrate.automigrate.enabled", false);
 #endif
 // 4 here means the suggestion notification will be automatically
 // hidden the 4th day, so it will actually be shown on 3 different days.
 pref("browser.migrate.automigrate.daysToOfferUndo", 4);
 pref("browser.migrate.automigrate.ui.enabled", true);
-pref("browser.migrate.automigrate.inpage.ui.enabled", false);
 
 // See comments in bug 1340115 on how we got to these numbers.
 pref("browser.migrate.chrome.history.limit", 2000);
 pref("browser.migrate.chrome.history.maxAgeInDays", 180);
 
 // Enable browser frames for use on desktop.  Only exposed to chrome callers.
 pref("dom.mozBrowserFramesEnabled", true);
 
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -328,16 +328,18 @@
       <toolbarbutton label="&sidebarMenuClose.label;"
                      class="subviewbutton"
                      oncommand="SidebarUI.hide()"/>
     </panel>
 
     <menupopup id="toolbar-context-menu"
                onpopupshowing="onViewToolbarsPopupShowing(event, document.getElementById('viewToolbarsMenuSeparator'));">
       <menuitem oncommand="gCustomizeMode.addToPanel(document.popupNode)"
+                photonaccesskey="&customizeMenu.pinToOverflowMenu.accesskey;"
+                photonlabel="&customizeMenu.pinToOverflowMenu.label;"
                 accesskey="&customizeMenu.moveToPanel.accesskey;"
                 label="&customizeMenu.moveToPanel.label;"
                 contexttype="toolbaritem"
                 class="customize-context-moveToPanel"/>
       <menuitem oncommand="gCustomizeMode.removeFromArea(document.popupNode)"
                 accesskey="&customizeMenu.removeFromToolbar.accesskey;"
                 label="&customizeMenu.removeFromToolbar.label;"
                 contexttype="toolbaritem"
--- a/browser/base/content/newtab/page.js
+++ b/browser/base/content/newtab/page.js
@@ -246,11 +246,15 @@ var gPage = {
       this.onPageVisibleAndLoaded();
     } else {
       addEventListener("load", this);
     }
   },
 
   onPageVisibleAndLoaded() {
     // Maybe tell the user they can undo an initial automigration
-    sendAsyncMessage("NewTab:MaybeShowMigrateMessage");
+    this.maybeShowAutoMigrationUndoNotification();
+  },
+
+  maybeShowAutoMigrationUndoNotification() {
+    sendAsyncMessage("NewTab:MaybeShowAutoMigrationUndoNotification");
   },
 };
--- a/browser/base/content/tab-content.js
+++ b/browser/base/content/tab-content.js
@@ -155,17 +155,17 @@ var AboutHomeListener = {
     docElt.setAttribute("snippetsVersion", aData.snippetsVersion);
   },
 
   onPageLoad() {
     addMessageListener("AboutHome:Update", this);
     addEventListener("click", this, true);
     addEventListener("pagehide", this, true);
 
-    sendAsyncMessage("AboutHome:MaybeShowMigrateMessage");
+    sendAsyncMessage("AboutHome:MaybeShowAutoMigrationUndoNotification");
     sendAsyncMessage("AboutHome:RequestUpdate");
   },
 
   onClick(aEvent) {
     if (!aEvent.isTrusted || // Don't trust synthetic events
         aEvent.button == 2 || aEvent.target.localName != "button") {
       return;
     }
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -1340,17 +1340,17 @@
           // If the user happened to type into the URL bar for this browser
           // by the time we got here, focusing will cause the text to be
           // selected which could cause them to overwrite what they've
           // already typed in.
           if (gURLBar.focused && newBrowser.userTypedValue) {
             return;
           }
 
-          if (!window.fullScreen || isTabEmpty(this.mCurrentTab)) {
+          if (!window.fullScreen || isTabEmpty(newTab)) {
             focusAndSelectUrlBar();
             return;
           }
         }
 
         // Focus the find bar if it was previously focused for that tab.
         if (gFindBarInitialized && !gFindBar.hidden &&
             this.selectedTab._findBarFocused) {
--- a/browser/base/content/test/newtab/browser.ini
+++ b/browser/base/content/test/newtab/browser.ini
@@ -23,16 +23,17 @@ skip-if = (os == "mac" && debug) # tempo
 [browser_newtab_bug1271075.js]
 [browser_newtab_disable.js]
 [browser_newtab_drag_drop.js]
 [browser_newtab_drag_drop_ext.js]
 # temporary until determine why more intermittent on VM
 subsuite = clipboard
 [browser_newtab_drop_preview.js]
 [browser_newtab_focus.js]
+[browser_newtab_fullscreen_focus.js]
 [browser_newtab_perwindow_private_browsing.js]
 [browser_newtab_reflow_load.js]
 support-files =
   content-reflows.js
 [browser_newtab_search.js]
 support-files =
   searchEngineNoLogo.xml
   searchEngineFavicon.xml
new file mode 100644
--- /dev/null
+++ b/browser/base/content/test/newtab/browser_newtab_fullscreen_focus.js
@@ -0,0 +1,35 @@
+"use strict";
+
+function isFullscreenSizeMode() {
+  let sizemode = document.documentElement.getAttribute("sizemode");
+  return sizemode == "fullscreen";
+}
+
+/**
+ * Checks that the URL bar is correctly focused
+ * when a new tab is opened while in fullscreen
+ * mode.
+ */
+add_task(async function() {
+  gURLBar.blur();
+
+  Assert.ok(!window.fullScreen, "Should not start in fullscreen mode.");
+  BrowserFullScreen();
+  await BrowserTestUtils.waitForCondition(() => isFullscreenSizeMode());
+
+  registerCleanupFunction(async function() {
+    // Exit fullscreen if we're still in it.
+    if (window.fullScreen) {
+      BrowserFullScreen();
+      await BrowserTestUtils.waitForCondition(() => !isFullscreenSizeMode());
+    }
+  });
+
+  Assert.ok(window.fullScreen, "Should be in fullscreen mode now.");
+
+  let newTabOpened = BrowserTestUtils.waitForEvent(gBrowser, "TabSwitchDone");
+  BrowserOpenTab();
+  await newTabOpened;
+
+  Assert.ok(gURLBar.focused, "URL bar should be focused.");
+});
--- a/browser/base/content/webext-panels.js
+++ b/browser/base/content/webext-panels.js
@@ -7,22 +7,22 @@
 /* import-globals-from browser.js */
 /* import-globals-from nsContextMenu.js */
 
 XPCOMUtils.defineLazyModuleGetter(this, "ExtensionParent",
                                   "resource://gre/modules/ExtensionParent.jsm");
 Cu.import("resource://gre/modules/ExtensionUtils.jsm");
 
 var {
+  extensionStylesheets,
   promiseEvent,
 } = ExtensionUtils;
 
 const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
 
-
 function getBrowser(sidebar) {
   let browser = document.getElementById("webext-panels-browser");
   if (browser) {
     return Promise.resolve(browser);
   }
 
   browser = document.createElementNS(XUL_NS, "browser");
   browser.setAttribute("id", "webext-panels-browser");
@@ -49,25 +49,35 @@ function getBrowser(sidebar) {
   } else {
     readyPromise = Promise.resolve();
   }
   document.documentElement.appendChild(browser);
 
   return readyPromise.then(() => {
     browser.messageManager.loadFrameScript("chrome://browser/content/content.js", false);
     ExtensionParent.apiManager.emit("extension-browser-inserted", browser);
+
+    if (sidebar.browserStyle) {
+      browser.messageManager.loadFrameScript(
+        "chrome://extensions/content/ext-browser-content.js", false);
+
+      browser.messageManager.sendAsyncMessage("Extension:InitBrowser", {
+        stylesheets: extensionStylesheets,
+      });
+    }
     return browser;
   });
 }
 
 function loadWebPanel() {
   let sidebarURI = new URL(location);
   let sidebar = {
     uri: sidebarURI.searchParams.get("panel"),
     remote: sidebarURI.searchParams.get("remote"),
+    browserStyle: sidebarURI.searchParams.get("browser-style"),
   };
   getBrowser(sidebar).then(browser => {
     browser.loadURI(sidebar.uri);
   });
 }
 
 function load() {
   this.loadWebPanel();
--- a/browser/components/customizableui/CustomizeMode.jsm
+++ b/browser/components/customizableui/CustomizeMode.jsm
@@ -771,17 +771,19 @@ CustomizeMode.prototype = {
     }
   },
 
   addToPanel(aNode) {
     aNode = this._getCustomizableChildForNode(aNode);
     if (aNode.localName == "toolbarpaletteitem" && aNode.firstChild) {
       aNode = aNode.firstChild;
     }
-    CustomizableUI.addWidgetToArea(aNode.id, CustomizableUI.AREA_PANEL);
+    let panel = gPhotonStructure ? CustomizableUI.AREA_FIXED_OVERFLOW_PANEL
+                                 : CustomizableUI.AREA_PANEL;
+    CustomizableUI.addWidgetToArea(aNode.id, panel);
     if (!this._customizing) {
       CustomizableUI.dispatchToolboxEvent("customizationchange");
     }
   },
 
   removeFromArea(aNode) {
     aNode = this._getCustomizableChildForNode(aNode);
     if (aNode.localName == "toolbarpaletteitem" && aNode.firstChild) {
--- a/browser/components/customizableui/content/panelUI.inc.xul
+++ b/browser/components/customizableui/content/panelUI.inc.xul
@@ -327,52 +327,16 @@
           <label id="PanelUI-panic-warning">&panicButton.view.undoWarning;</label>
         </vbox>
         <button id="PanelUI-panic-view-button"
                 label="&panicButton.view.forgetButton;"/>
       </vbox>
     </panelview>
 
   </panelmultiview>
-  <!-- These menupopups are located here to prevent flickering,
-       see bug 492960 comment 20. -->
-  <menupopup id="customizationPanelItemContextMenu">
-    <menuitem oncommand="gCustomizeMode.addToToolbar(document.popupNode)"
-              closemenu="single"
-              class="customize-context-moveToToolbar"
-              accesskey="&customizeMenu.moveToToolbar.accesskey;"
-              label="&customizeMenu.moveToToolbar.label;"/>
-    <menuitem oncommand="gCustomizeMode.removeFromArea(document.popupNode)"
-              closemenu="single"
-              class="customize-context-removeFromPanel"
-              accesskey="&customizeMenu.removeFromMenu.accesskey;"
-              label="&customizeMenu.removeFromMenu.label;"/>
-    <menuseparator/>
-    <menuitem command="cmd_CustomizeToolbars"
-              class="viewCustomizeToolbar"
-              accesskey="&viewCustomizeToolbar.accesskey;"
-              label="&viewCustomizeToolbar.label;"/>
-  </menupopup>
-
-  <menupopup id="customizationPaletteItemContextMenu">
-    <menuitem oncommand="gCustomizeMode.addToToolbar(document.popupNode)"
-              class="customize-context-addToToolbar"
-              accesskey="&customizeMenu.addToToolbar.accesskey;"
-              label="&customizeMenu.addToToolbar.label;"/>
-    <menuitem oncommand="gCustomizeMode.addToPanel(document.popupNode)"
-              class="customize-context-addToPanel"
-              accesskey="&customizeMenu.addToPanel.accesskey;"
-              label="&customizeMenu.addToPanel.label;"/>
-  </menupopup>
-
-  <menupopup id="customizationPanelContextMenu">
-    <menuitem command="cmd_CustomizeToolbars"
-              accesskey="&customizeMenu.addMoreItems.accesskey;"
-              label="&customizeMenu.addMoreItems.label;"/>
-  </menupopup>
 </panel>
 
 <panel id="widget-overflow"
        role="group"
        type="arrow"
        noautofocus="true"
        position="bottomcenter topright"
        hidden="true">
@@ -485,16 +449,57 @@
                      checkboxhidden="true"
                      hidden="true">
     <popupnotificationcontent id="update-restart-notification-content" orient="vertical">
       <description id="update-restart-description">&updateRestart.message;</description>
     </popupnotificationcontent>
   </popupnotification>
 </panel>
 
+<menupopup id="customizationPanelItemContextMenu">
+  <menuitem oncommand="gCustomizeMode.addToToolbar(document.popupNode)"
+            closemenu="single"
+            class="customize-context-moveToToolbar"
+            photonaccesskey="&customizeMenu.unpinFromOverflowMenu.accesskey;"
+            photonlabel="&customizeMenu.unpinFromOverflowMenu.label;"
+            accesskey="&customizeMenu.moveToToolbar.accesskey;"
+            label="&customizeMenu.moveToToolbar.label;"/>
+  <menuitem oncommand="gCustomizeMode.removeFromArea(document.popupNode)"
+            closemenu="single"
+            class="customize-context-removeFromPanel"
+            photonaccesskey="&customizeMenu.removeFromToolbar.accesskey;"
+            photonlabel="&customizeMenu.removeFromToolbar.label;"
+            accesskey="&customizeMenu.removeFromMenu.accesskey;"
+            label="&customizeMenu.removeFromMenu.label;"/>
+  <menuseparator/>
+  <menuitem command="cmd_CustomizeToolbars"
+            class="viewCustomizeToolbar"
+            accesskey="&viewCustomizeToolbar.accesskey;"
+            label="&viewCustomizeToolbar.label;"/>
+</menupopup>
+
+<menupopup id="customizationPaletteItemContextMenu">
+  <menuitem oncommand="gCustomizeMode.addToToolbar(document.popupNode)"
+            class="customize-context-addToToolbar"
+            accesskey="&customizeMenu.addToToolbar.accesskey;"
+            label="&customizeMenu.addToToolbar.label;"/>
+  <menuitem oncommand="gCustomizeMode.addToPanel(document.popupNode)"
+            class="customize-context-addToPanel"
+            photonaccesskey="&customizeMenu.addToOverflowMenu.accesskey;"
+            photonlabel="&customizeMenu.addToOverflowMenu.label;"
+            accesskey="&customizeMenu.addToPanel.accesskey;"
+            label="&customizeMenu.addToPanel.label;"/>
+</menupopup>
+
+<menupopup id="customizationPanelContextMenu">
+  <menuitem command="cmd_CustomizeToolbars"
+            accesskey="&customizeMenu.addMoreItems.accesskey;"
+            label="&customizeMenu.addMoreItems.label;"/>
+</menupopup>
+
 <panel id="appMenu-popup"
        class="cui-widget-panel"
        role="group"
        type="arrow"
        hidden="true"
        flip="slide"
        position="bottomcenter topright"
        noautofocus="true">
--- a/browser/components/customizableui/content/panelUI.js
+++ b/browser/components/customizableui/content/panelUI.js
@@ -65,26 +65,28 @@ const PanelUI = {
     window.matchMedia("(-moz-overlay-scrollbars)").addListener(this._overlayScrollListenerBoundFn);
     CustomizableUI.addListener(this);
 
     for (let event of this.kEvents) {
       this.notificationPanel.addEventListener(event, this);
     }
 
     this._initPhotonPanel();
+    this._updateContextMenuLabels();
     Services.obs.notifyObservers(null, "appMenu-notifications-request", "refresh");
 
     this._initialized = true;
   },
 
   reinit() {
     this._removeEventListeners();
     // If the Photon pref changes, we need to re-init our element references.
     this._initElements();
     this._initPhotonPanel();
+    this._updateContextMenuLabels();
     delete this._readyPromise;
     this._isReady = false;
   },
 
   // We do this sync on init because in order to have the overflow button show up
   // we need to know whether anything is in the permanent panel area.
   _initPhotonPanel() {
     if (gPhotonStructure) {
@@ -109,16 +111,42 @@ const PanelUI = {
       let id = v;
       this.__defineGetter__(getKey, function() {
         delete this[getKey];
         return this[getKey] = document.getElementById(id);
       });
     }
   },
 
+  _updateContextMenuLabels() {
+    const kContextMenus = [
+      "customizationPanelItemContextMenu",
+      "customizationPaletteItemContextMenu",
+      "toolbar-context-menu",
+    ];
+    for (let menuId of kContextMenus) {
+      let menu = document.getElementById(menuId);
+      if (gPhotonStructure) {
+        let items = menu.querySelectorAll("menuitem[photonlabel]");
+        for (let item of items) {
+          item.setAttribute("nonphotonlabel", item.getAttribute("label"));
+          item.setAttribute("nonphotonaccesskey", item.getAttribute("accesskey"));
+          item.setAttribute("label", item.getAttribute("photonlabel"));
+          item.setAttribute("accesskey", item.getAttribute("photonaccesskey"));
+        }
+      } else {
+        let items = menu.querySelectorAll("menuitem[nonphotonlabel]");
+        for (let item of items) {
+          item.setAttribute("label", item.getAttribute("nonphotonlabel"));
+          item.setAttribute("accesskey", item.getAttribute("nonphotonaccesskey"));
+        }
+      }
+    }
+  },
+
   _eventListenersAdded: false,
   _ensureEventListenersAdded() {
     if (this._eventListenersAdded)
       return;
     this._addEventListeners();
   },
 
   _addEventListeners() {
@@ -536,16 +564,19 @@ const PanelUI = {
   },
 
   updateOverflowStatus() {
     let hasKids = this.overflowFixedList.hasChildNodes();
     if (hasKids && !this.navbar.hasAttribute("nonemptyoverflow")) {
       this.navbar.setAttribute("nonemptyoverflow", "true");
       this.overflowPanel.setAttribute("hasfixeditems", "true");
     } else if (!hasKids && this.navbar.hasAttribute("nonemptyoverflow")) {
+      if (this.overflowPanel.state != "closed") {
+        this.overflowPanel.hidePopup();
+      }
       this.overflowPanel.removeAttribute("hasfixeditems");
       this.navbar.removeAttribute("nonemptyoverflow");
     }
   },
 
   onWidgetAfterDOMChange(aNode, aNextNode, aContainer, aWasRemoval) {
     if (gPhotonStructure && aContainer == this.overflowFixedList) {
       this.updateOverflowStatus();
--- a/browser/components/customizableui/test/browser.ini
+++ b/browser/components/customizableui/test/browser.ini
@@ -156,9 +156,10 @@ skip-if = os == "mac"
 tags = fullscreen
 skip-if = os == "mac"
 [browser_panelUINotifications_multiWindow.js]
 [browser_switch_to_customize_mode.js]
 [browser_synced_tabs_menu.js]
 [browser_check_tooltips_in_navbar.js]
 [browser_editcontrols_update.js]
 subsuite = clipboard
+[browser_photon_customization_context_menus.js]
 [browser_remote_tabs_button.js]
--- a/browser/components/customizableui/test/browser_overflow_use_subviews.js
+++ b/browser/components/customizableui/test/browser_overflow_use_subviews.js
@@ -1,25 +1,26 @@
 "use strict";
 
 const kOverflowPanel = document.getElementById("widget-overflow");
 
 var gOriginalWidth;
-registerCleanupFunction(function*() {
+registerCleanupFunction(async function() {
   kOverflowPanel.removeAttribute("animate");
   window.resizeTo(gOriginalWidth, window.outerHeight);
+  await waitForCondition(() => !document.getElementById("nav-bar").hasAttribute("overflowing"));
   CustomizableUI.reset();
 });
 
 /**
  * This checks that subview-compatible items show up as subviews rather than
- * re-anchored panels. If we ever remove the character encoding widget, please
+ * re-anchored panels. If we ever remove the developer widget, please
  * replace this test with another subview - don't remove it.
  */
-add_task(async function check_character_encoding_subview_in_overflow() {
+add_task(async function check_developer_subview_in_overflow() {
   kOverflowPanel.setAttribute("animate", "false");
   gOriginalWidth = window.outerWidth;
 
   CustomizableUI.addWidgetToArea("developer-button", CustomizableUI.AREA_NAVBAR);
 
   let navbar = document.getElementById(CustomizableUI.AREA_NAVBAR);
   ok(!navbar.hasAttribute("overflowing"), "Should start with a non-overflowing toolbar.");
   window.resizeTo(400, window.outerHeight);
@@ -34,18 +35,16 @@ add_task(async function check_character_
   let developerView = document.getElementById("PanelUI-developer");
   let button = document.getElementById("developer-button");
   let subviewShownPromise = subviewShown(developerView);
   button.click();
   await subviewShownPromise;
   is(developerView.closest("panel"), kOverflowPanel, "Should be inside the panel");
   kOverflowPanel.hidePopup();
   await Promise.resolve(); // wait for popup to hide fully.
-
-  CustomizableUI.reset();
 });
 
 /**
  * This checks that non-subview-compatible items still work correctly.
  * Ideally we should make the downloads panel and bookmarks/library item
  * proper subview items, then this test can go away, and potentially we can
  * simplify some of the subview anchoring code.
  */
copy from browser/components/customizableui/test/browser_880164_customization_context_menus.js
copy to browser/components/customizableui/test/browser_photon_customization_context_menus.js
--- a/browser/components/customizableui/test/browser_880164_customization_context_menus.js
+++ b/browser/components/customizableui/test/browser_photon_customization_context_menus.js
@@ -3,20 +3,23 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 "use strict";
 
 requestLongerTimeout(2);
 
 const isOSX = (Services.appinfo.OS === "Darwin");
 
+const overflowButton = document.getElementById("nav-bar-overflow-button");
+const overflowPanel = document.getElementById("widget-overflow");
+
 // Right-click on the home button should
 // show a context menu with options to move it.
 add_task(async function() {
-  await SpecialPowers.pushPrefEnv({set: [["browser.photon.structure.enabled", false]]});
+  await SpecialPowers.pushPrefEnv({set: [["browser.photon.structure.enabled", true]]});
   let contextMenu = document.getElementById("toolbar-context-menu");
   let shownPromise = popupShown(contextMenu);
   let homeButton = document.getElementById("home-button");
   EventUtils.synthesizeMouse(homeButton, 2, 2, {type: "contextmenu", button: 2 });
   await shownPromise;
 
   let expectedEntries = [
     [".customize-context-moveToPanel", true],
@@ -142,67 +145,70 @@ add_task(async function() {
 });
 
 // Right-click on the searchbar and moving it to the menu
 // and back should move the search-container instead.
 add_task(async function() {
   let searchbar = document.getElementById("searchbar");
   gCustomizeMode.addToPanel(searchbar);
   let placement = CustomizableUI.getPlacementOfWidget("search-container");
-  is(placement.area, CustomizableUI.AREA_PANEL, "Should be in panel");
+  is(placement.area, CustomizableUI.AREA_FIXED_OVERFLOW_PANEL, "Should be in panel");
 
-  let shownPanelPromise = promisePanelShown(window);
-  PanelUI.toggle({type: "command"});
+  let shownPanelPromise = popupShown(overflowPanel);
+  overflowButton.click();
   await shownPanelPromise;
-  let hiddenPanelPromise = promisePanelHidden(window);
-  PanelUI.toggle({type: "command"});
+  let hiddenPanelPromise = popupHidden(overflowPanel);
+  overflowButton.click();
   await hiddenPanelPromise;
 
   gCustomizeMode.addToToolbar(searchbar);
   placement = CustomizableUI.getPlacementOfWidget("search-container");
   is(placement.area, CustomizableUI.AREA_NAVBAR, "Should be in navbar");
   gCustomizeMode.removeFromArea(searchbar);
   placement = CustomizableUI.getPlacementOfWidget("search-container");
   is(placement, null, "Should be in palette");
   CustomizableUI.reset();
   placement = CustomizableUI.getPlacementOfWidget("search-container");
   is(placement.area, CustomizableUI.AREA_NAVBAR, "Should be in navbar");
 });
 
-// Right-click on an item within the menu panel should
+// Right-click on an item within the panel should
 // show a context menu with options to move it.
 add_task(async function() {
-  let shownPanelPromise = promisePanelShown(window);
-  PanelUI.toggle({type: "command"});
+  CustomizableUI.addWidgetToArea("new-window-button", CustomizableUI.AREA_FIXED_OVERFLOW_PANEL);
+  let shownPanelPromise = popupShown(overflowPanel);
+  overflowButton.click();
   await shownPanelPromise;
 
   let contextMenu = document.getElementById("customizationPanelItemContextMenu");
   let shownContextPromise = popupShown(contextMenu);
   let newWindowButton = document.getElementById("new-window-button");
   ok(newWindowButton, "new-window-button was found");
   EventUtils.synthesizeMouse(newWindowButton, 2, 2, {type: "contextmenu", button: 2});
   await shownContextPromise;
 
-  is(PanelUI.panel.state, "open", "The PanelUI should still be open.");
+  is(overflowPanel.state, "open", "The overflow panel should still be open.");
 
   let expectedEntries = [
     [".customize-context-moveToToolbar", true],
     [".customize-context-removeFromPanel", true],
     ["---"],
     [".viewCustomizeToolbar", true]
   ];
   checkContextMenu(contextMenu, expectedEntries);
 
   let hiddenContextPromise = popupHidden(contextMenu);
   contextMenu.hidePopup();
   await hiddenContextPromise;
 
-  let hiddenPromise = promisePanelHidden(window);
-  PanelUI.toggle({type: "command"});
+  let hiddenPromise = popupHidden(overflowPanel);
+  overflowButton.click();
   await hiddenPromise;
+
+  CustomizableUI.removeWidgetFromArea("new-window-button");
 });
 
 // Right-click on the home button while in customization mode
 // should show a context menu with options to move it.
 add_task(async function() {
   await startCustomizing();
   let contextMenu = document.getElementById("toolbar-context-menu");
   let shownPromise = popupShown(contextMenu);
@@ -248,16 +254,17 @@ add_task(async function() {
   let hiddenContextPromise = popupHidden(contextMenu);
   contextMenu.hidePopup();
   await hiddenContextPromise;
 });
 
 // Right-click on an item in the panel while in customization mode
 // should show a context menu with options to move it.
 add_task(async function() {
+  CustomizableUI.addWidgetToArea("new-window-button", CustomizableUI.AREA_FIXED_OVERFLOW_PANEL);
   let contextMenu = document.getElementById("customizationPanelItemContextMenu");
   let shownPromise = popupShown(contextMenu);
   let newWindowButton = document.getElementById("wrapper-new-window-button");
   EventUtils.synthesizeMouse(newWindowButton, 2, 2, {type: "contextmenu", button: 2});
   await shownPromise;
 
   let expectedEntries = [
     [".customize-context-moveToToolbar", true],
@@ -265,22 +272,24 @@ add_task(async function() {
     ["---"],
     [".viewCustomizeToolbar", false]
   ];
   checkContextMenu(contextMenu, expectedEntries);
 
   let hiddenContextPromise = popupHidden(contextMenu);
   contextMenu.hidePopup();
   await hiddenContextPromise;
+  CustomizableUI.removeWidgetFromArea("new-window-button");
   await endCustomizing();
 });
 
 // Test the toolbarbutton panel context menu in customization mode
 // without opening the panel before customization mode
 add_task(async function() {
+  CustomizableUI.addWidgetToArea("new-window-button", CustomizableUI.AREA_FIXED_OVERFLOW_PANEL);
   this.otherWin = await openAndLoadWindow(null, true);
 
   await new Promise(resolve => waitForFocus(resolve, this.otherWin));
 
   await startCustomizing(this.otherWin);
 
   let contextMenu = this.otherWin.document.getElementById("customizationPanelItemContextMenu");
   let shownPromise = popupShown(contextMenu);
@@ -295,25 +304,27 @@ add_task(async function() {
     [".viewCustomizeToolbar", false]
   ];
   checkContextMenu(contextMenu, expectedEntries, this.otherWin);
 
   let hiddenContextPromise = popupHidden(contextMenu);
   contextMenu.hidePopup();
   await hiddenContextPromise;
   await endCustomizing(this.otherWin);
+  CustomizableUI.removeWidgetFromArea("new-window-button");
   await promiseWindowClosed(this.otherWin);
   this.otherWin = null;
 
   await new Promise(resolve => waitForFocus(resolve, window));
 });
 
 // Bug 945191 - Combined buttons show wrong context menu options
 // when they are in the toolbar.
 add_task(async function() {
+  CustomizableUI.addWidgetToArea("zoom-controls", CustomizableUI.AREA_FIXED_OVERFLOW_PANEL);
   await startCustomizing();
   let contextMenu = document.getElementById("customizationPanelItemContextMenu");
   let shownPromise = popupShown(contextMenu);
   let zoomControls = document.getElementById("wrapper-zoom-controls");
   EventUtils.synthesizeMouse(zoomControls, 2, 2, {type: "contextmenu", button: 2});
   await shownPromise;
   // Execute the command to move the item from the panel to the toolbar.
   contextMenu.childNodes[0].doCommand();
@@ -348,62 +359,67 @@ add_task(async function() {
   hiddenPromise = popupHidden(contextMenu);
   contextMenu.hidePopup();
   await hiddenPromise;
   await resetCustomization();
 });
 
 // Bug 947586 - After customization, panel items show wrong context menu options
 add_task(async function() {
+  info("Check panel context menu is correct after customization");
   await startCustomizing();
   await endCustomizing();
 
-  await PanelUI.show();
+  CustomizableUI.addWidgetToArea("new-window-button", CustomizableUI.AREA_FIXED_OVERFLOW_PANEL);
+  let shownPanelPromise = popupShown(overflowPanel);
+  overflowButton.click();
+  await shownPanelPromise;
 
   let contextMenu = document.getElementById("customizationPanelItemContextMenu");
   let shownContextPromise = popupShown(contextMenu);
   let newWindowButton = document.getElementById("new-window-button");
   ok(newWindowButton, "new-window-button was found");
   EventUtils.synthesizeMouse(newWindowButton, 2, 2, {type: "contextmenu", button: 2});
   await shownContextPromise;
 
-  is(PanelUI.panel.state, "open", "The PanelUI should still be open.");
+  is(overflowPanel.state, "open", "The panel should still be open.");
 
   let expectedEntries = [
     [".customize-context-moveToToolbar", true],
     [".customize-context-removeFromPanel", true],
     ["---"],
     [".viewCustomizeToolbar", true]
   ];
   checkContextMenu(contextMenu, expectedEntries);
 
   let hiddenContextPromise = popupHidden(contextMenu);
   contextMenu.hidePopup();
   await hiddenContextPromise;
 
-  let hiddenPromise = promisePanelHidden(window);
-  PanelUI.hide();
+  let hiddenPromise = popupHidden(overflowPanel);
+  overflowButton.click();
   await hiddenPromise;
+  CustomizableUI.removeWidgetFromArea("new-window-button");
 });
 
 
 // Bug 982027 - moving icon around removes custom context menu.
 add_task(async function() {
   let widgetId = "custom-context-menu-toolbarbutton";
   let expectedContext = "myfancycontext";
   let widget = createDummyXULButton(widgetId, "Test ctxt menu");
   widget.setAttribute("context", expectedContext);
   CustomizableUI.addWidgetToArea(widgetId, CustomizableUI.AREA_NAVBAR);
   is(widget.getAttribute("context"), expectedContext, "Should have context menu when added to the toolbar.");
 
   await startCustomizing();
   is(widget.getAttribute("context"), "", "Should not have own context menu in the toolbar now that we're customizing.");
   is(widget.getAttribute("wrapped-context"), expectedContext, "Should keep own context menu wrapped when in toolbar.");
 
-  let panel = PanelUI.contents;
+  let panel = document.getElementById("widget-overflow-fixed-list");
   simulateItemDrag(widget, panel);
   is(widget.getAttribute("context"), "", "Should not have own context menu when in the panel.");
   is(widget.getAttribute("wrapped-context"), expectedContext, "Should keep own context menu wrapped now that we're in the panel.");
 
   simulateItemDrag(widget, document.getElementById("nav-bar").customizationTarget);
   is(widget.getAttribute("context"), "", "Should not have own context menu when back in toolbar because we're still customizing.");
   is(widget.getAttribute("wrapped-context"), expectedContext, "Should keep own context menu wrapped now that we're back in the toolbar.");
 
--- a/browser/components/extensions/ExtensionPopups.jsm
+++ b/browser/components/extensions/ExtensionPopups.jsm
@@ -19,16 +19,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
 XPCOMUtils.defineLazyModuleGetter(this, "setTimeout",
                                   "resource://gre/modules/Timer.jsm");
 
 Cu.import("resource://gre/modules/AppConstants.jsm");
 Cu.import("resource://gre/modules/ExtensionUtils.jsm");
 
 var {
   DefaultWeakMap,
+  extensionStylesheets,
   promiseEvent,
 } = ExtensionUtils;
 
 
 const POPUP_LOAD_TIMEOUT_MS = 200;
 
 const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
 
@@ -45,25 +46,16 @@ function promisePopupShown(popup) {
     } else {
       popup.addEventListener("popupshown", function(event) {
         resolve();
       }, {once: true});
     }
   });
 }
 
-XPCOMUtils.defineLazyGetter(this, "popupStylesheets", () => {
-  let stylesheets = ["chrome://browser/content/extension.css"];
-
-  if (AppConstants.platform === "macosx") {
-    stylesheets.push("chrome://browser/content/extension-mac.css");
-  }
-  return stylesheets;
-});
-
 XPCOMUtils.defineLazyGetter(this, "standaloneStylesheets", () => {
   let stylesheets = [];
 
   if (AppConstants.platform === "macosx") {
     stylesheets.push("chrome://browser/content/extension-mac-panel.css");
   }
   if (AppConstants.platform === "win") {
     stylesheets.push("chrome://browser/content/extension-win-panel.css");
@@ -163,17 +155,17 @@ class BasePopup {
   get DESTROY_EVENT() {
     throw new Error("Not implemented");
   }
 
   get STYLESHEETS() {
     let sheets = [];
 
     if (this.browserStyle) {
-      sheets.push(...popupStylesheets);
+      sheets.push(...extensionStylesheets);
     }
     if (!this.fixedWidth) {
       sheets.push(...standaloneStylesheets);
     }
 
     return sheets;
   }
 
--- a/browser/components/extensions/ext-sidebarAction.js
+++ b/browser/components/extensions/ext-sidebarAction.js
@@ -38,16 +38,20 @@ this.sidebarAction = class extends Exten
     let options = extension.manifest.sidebar_action;
 
     // Add the extension to the sidebar menu.  The sidebar widget will copy
     // from that when it is viewed, so we shouldn't need to update that.
     let widgetId = makeWidgetId(extension.id);
     this.id = `${widgetId}-sidebar-action`;
     this.menuId = `menu_${this.id}`;
 
+    // We default browser_style to true because this is a new API and
+    // we therefore don't need to worry about breaking existing add-ons.
+    this.browserStyle = options.browser_style || options.browser_style === null;
+
     this.defaults = {
       enabled: true,
       title: options.default_title || extension.name,
       icon: IconDetails.normalize({path: options.default_icon}, extension),
       panel: options.default_panel || "",
     };
 
     this.tabContext = new TabContext(tab => Object.create(this.defaults),
@@ -115,34 +119,42 @@ this.sidebarAction = class extends Exten
       let widget = CustomizableUI.getWidget("sidebar-button");
       if (!widget.areaType) {
         CustomizableUI.addWidgetToArea("sidebar-button", CustomizableUI.AREA_NAVBAR, 0);
       }
     }
   }
 
   sidebarUrl(panel) {
+    let url = `${sidebarURL}?panel=${encodeURIComponent(panel)}`;
+
     if (this.extension.remote) {
-      return `${sidebarURL}?remote=1&panel=${encodeURIComponent(panel)}`;
+      url += "&remote=1";
     }
-    return `${sidebarURL}?&panel=${encodeURIComponent(panel)}`;
+
+    if (this.browserStyle) {
+      url += "&browser-style=1";
+    }
+
+    return url;
   }
 
   createMenuItem(window, details) {
     let {document} = window;
 
     // Use of the broadcaster allows browser-sidebar.js to properly manage the
     // checkmarks in the menus.
     let broadcaster = document.createElementNS(XUL_NS, "broadcaster");
     broadcaster.setAttribute("id", this.id);
     broadcaster.setAttribute("autoCheck", "false");
     broadcaster.setAttribute("type", "checkbox");
     broadcaster.setAttribute("group", "sidebar");
     broadcaster.setAttribute("label", details.title);
     broadcaster.setAttribute("sidebarurl", this.sidebarUrl(details.panel));
+
     // oncommand gets attached to menuitem, so we use the observes attribute to
     // get the command id we pass to SidebarUI.
     broadcaster.setAttribute("oncommand", "SidebarUI.toggle(this.getAttribute('observes'))");
 
     let menuitem = document.createElementNS(XUL_NS, "menuitem");
     menuitem.setAttribute("id", this.menuId);
     menuitem.setAttribute("observes", this.id);
     menuitem.setAttribute("class", "menuitem-iconic webextension-menuitem");
--- a/browser/components/extensions/schemas/sidebar_action.json
+++ b/browser/components/extensions/schemas/sidebar_action.json
@@ -17,16 +17,20 @@
                 "type": "string",
                 "optional": true,
                 "preprocess": "localize"
               },
               "default_icon": {
                 "$ref": "IconPath",
                 "optional": true
               },
+              "browser_style": {
+                "type": "boolean",
+                "optional": true
+              },
               "default_panel": {
                 "type": "string",
                 "format": "strictRelativeUrl",
                 "preprocess": "localize"
               }
             },
             "optional": true
           }
--- a/browser/components/extensions/test/browser/browser-common.ini
+++ b/browser/components/extensions/test/browser/browser-common.ini
@@ -90,16 +90,17 @@ skip-if = debug || asan # Bug 1354681
 [browser_ext_runtime_setUninstallURL.js]
 [browser_ext_sessions_forgetClosedTab.js]
 [browser_ext_sessions_forgetClosedWindow.js]
 [browser_ext_sessions_getRecentlyClosed.js]
 [browser_ext_sessions_getRecentlyClosed_private.js]
 [browser_ext_sessions_getRecentlyClosed_tabs.js]
 [browser_ext_sessions_restore.js]
 [browser_ext_sidebarAction.js]
+[browser_ext_sidebarAction_browser_style.js]
 [browser_ext_sidebarAction_context.js]
 [browser_ext_sidebarAction_contextMenu.js]
 [browser_ext_sidebarAction_tabs.js]
 [browser_ext_sidebarAction_windows.js]
 [browser_ext_simple.js]
 [browser_ext_tab_runtimeConnect.js]
 [browser_ext_tabs_audio.js]
 [browser_ext_tabs_captureVisibleTab.js]
new file mode 100644
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_sidebarAction_browser_style.js
@@ -0,0 +1,74 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+function* testSidebarBrowserStyle(sidebarAction, assertMessage) {
+  function sidebarScript() {
+    browser.test.onMessage.addListener((msgName, info, assertMessage) => {
+      if (msgName !== "check-style") {
+        browser.test.notifyFail("options-ui-browser_style");
+      }
+
+      let style = window.getComputedStyle(document.getElementById("button"));
+      let buttonBackgroundColor = style.backgroundColor;
+      let browserStyleBackgroundColor = "rgb(9, 150, 248)";
+      if (!("browser_style" in info) || info.browser_style) {
+        browser.test.assertEq(browserStyleBackgroundColor, buttonBackgroundColor, assertMessage);
+      } else {
+        browser.test.assertTrue(browserStyleBackgroundColor !== buttonBackgroundColor, assertMessage);
+      }
+
+      browser.test.notifyPass("sidebar-browser-style");
+    });
+    browser.test.sendMessage("sidebar-ready");
+  }
+
+  let extension = ExtensionTestUtils.loadExtension({
+    manifest: {
+      "sidebar_action": sidebarAction,
+    },
+    useAddonManager: "temporary",
+
+    files: {
+      "panel.html": `
+        <!DOCTYPE html>
+        <html>
+          <button id="button" name="button" class="default">Default</button>
+          <script src="panel.js" type="text/javascript"></script>
+        </html>`,
+      "panel.js": sidebarScript,
+    },
+  });
+
+  let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser);
+
+  yield extension.startup();
+  yield extension.awaitMessage("sidebar-ready");
+
+  extension.sendMessage("check-style", sidebarAction, assertMessage);
+  yield extension.awaitFinish("sidebar-browser-style");
+
+  yield extension.unload();
+
+  yield BrowserTestUtils.removeTab(tab);
+}
+
+add_task(function* test_sidebar_without_setting_browser_style() {
+  yield testSidebarBrowserStyle({
+    "default_panel": "panel.html",
+  }, "Expected correct style when browser_style is excluded");
+});
+
+add_task(function* test_sidebar_with_browser_style_set_to_true() {
+  yield testSidebarBrowserStyle({
+    "default_panel": "panel.html",
+    "browser_style": true,
+  }, "Expected correct style when browser_style is set to `true`");
+});
+
+add_task(function* test_sidebar_with_browser_style_set_to_false() {
+  yield testSidebarBrowserStyle({
+    "default_panel": "panel.html",
+    "browser_style": false,
+  }, "Expected no style when browser_style is set to `false`");
+});
--- a/browser/components/migration/AutoMigrate.jsm
+++ b/browser/components/migration/AutoMigrate.jsm
@@ -6,34 +6,31 @@
 
 this.EXPORTED_SYMBOLS = ["AutoMigrate"];
 
 const { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
 
 const kAutoMigrateEnabledPref = "browser.migrate.automigrate.enabled";
 const kUndoUIEnabledPref = "browser.migrate.automigrate.ui.enabled";
 
-const kInPageUIEnabledPref = "browser.migrate.automigrate.inpage.ui.enabled";
-
 const kAutoMigrateBrowserPref = "browser.migrate.automigrate.browser";
 const kAutoMigrateImportedItemIds = "browser.migrate.automigrate.imported-items";
 
 const kAutoMigrateLastUndoPromptDateMsPref = "browser.migrate.automigrate.lastUndoPromptDateMs";
 const kAutoMigrateDaysToOfferUndoPref = "browser.migrate.automigrate.daysToOfferUndo";
 
 const kAutoMigrateUndoSurveyPref = "browser.migrate.automigrate.undo-survey";
 const kAutoMigrateUndoSurveyLocalePref = "browser.migrate.automigrate.undo-survey-locales";
 
 const kNotificationId = "automigration-undo";
 
 Cu.import("resource:///modules/MigrationUtils.jsm");
 Cu.import("resource://gre/modules/Preferences.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
 XPCOMUtils.defineLazyModuleGetter(this, "AsyncShutdown",
                                   "resource://gre/modules/AsyncShutdown.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "LoginHelper",
                                   "resource://gre/modules/LoginHelper.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "NewTabUtils",
                                   "resource://gre/modules/NewTabUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "OS",
                                   "resource://gre/modules/osfile.jsm");
@@ -312,125 +309,102 @@ const AutoMigrate = {
     let browserId = Services.prefs.getCharPref(kAutoMigrateBrowserPref);
     if (browserId) {
       return MigrationUtils.getBrowserName(browserId);
     }
     return null;
   },
 
   /**
-   * Decide if we need to show [the user] a prompt indicating we automatically
-   * imported their data.
+   * Show the user a notification bar indicating we automatically imported
+   * their data and offering them the possibility of removing it.
    * @param target (xul:browser)
    *        The browser in which we should show the notification.
-   * @returns {Boolean} return true when need to show the prompt.
    */
-  async shouldShowMigratePrompt(target) {
+  async maybeShowUndoNotification(target) {
     if (!(await this.canUndo())) {
-      return false;
+      return;
     }
 
     // The tab might have navigated since we requested the undo state:
     let canUndoFromThisPage = ["about:home", "about:newtab"].includes(target.currentURI.spec);
     if (!canUndoFromThisPage ||
         !Preferences.get(kUndoUIEnabledPref, false)) {
-      return false;
+      return;
+    }
+
+    let win = target.ownerGlobal;
+    let notificationBox = win.gBrowser.getNotificationBox(target);
+    if (!notificationBox || notificationBox.getNotificationWithValue(kNotificationId)) {
+      return;
     }
 
     // At this stage we're committed to show the prompt - unless we shouldn't,
     // in which case we remove the undo prefs (which will cause canUndo() to
     // return false from now on.):
-    if (this.isMigratePromptExpired()) {
+    if (!this.shouldStillShowUndoPrompt()) {
       this._purgeUndoState(this.UNDO_REMOVED_REASON_OFFER_EXPIRED);
       this._removeNotificationBars();
-      return false;
+      return;
     }
 
-    let remainingDays = Preferences.get(kAutoMigrateDaysToOfferUndoPref, 0);
-    Services.telemetry.getHistogramById("FX_STARTUP_MIGRATION_UNDO_OFFERED").add(4 - remainingDays);
-
-    return true;
-  },
-
-  /**
-   * Return the message that denotes the user data is migrated from the other browser.
-   * @returns {String} imported message with the brand and the browser name
-   */
-  getUndoMigrationMessage() {
     let browserName = this.getBrowserUsedForMigration();
     if (!browserName) {
       browserName = MigrationUtils.getLocalizedString("automigration.undo.unknownbrowser");
     }
-    const kMessageId = "automigration.undo.message2." +
+    const kMessageId = "automigration.undo.message." +
                       Preferences.get(kAutoMigrateImportedItemIds, "all");
     const kBrandShortName = gBrandBundle.GetStringFromName("brandShortName");
-    return MigrationUtils.getLocalizedString(kMessageId,
-                                             [kBrandShortName, browserName]);
-  },
+    let message = MigrationUtils.getLocalizedString(kMessageId,
+                                                    [browserName, kBrandShortName]);
 
-  /**
-   * Show the user a notification bar indicating we automatically imported
-   * their data and offering them the possibility of removing it.
-   * @param target (xul:browser)
-   *        The browser in which we should show the notification.
-   */
-  showUndoNotificationBar(target) {
-    let isInPage = Preferences.get(kInPageUIEnabledPref, false);
-    let win = target.ownerGlobal;
-    let notificationBox = win.gBrowser.getNotificationBox(target);
-    if (isInPage || !notificationBox || notificationBox.getNotificationWithValue(kNotificationId)) {
-      return;
-    }
-    let message = this.getUndoMigrationMessage();
     let buttons = [
       {
         label: MigrationUtils.getLocalizedString("automigration.undo.keep2.label"),
         accessKey: MigrationUtils.getLocalizedString("automigration.undo.keep2.accesskey"),
         callback: () => {
-          this.keepAutoMigration();
+          this._purgeUndoState(this.UNDO_REMOVED_REASON_OFFER_REJECTED);
           this._removeNotificationBars();
         },
       },
       {
         label: MigrationUtils.getLocalizedString("automigration.undo.dontkeep2.label"),
         accessKey: MigrationUtils.getLocalizedString("automigration.undo.dontkeep2.accesskey"),
         callback: () => {
-          this.undoAutoMigration(win);
+          this._maybeOpenUndoSurveyTab(win);
+          this.undo();
         },
       },
     ];
     notificationBox.appendNotification(
       message, kNotificationId, null, notificationBox.PRIORITY_INFO_HIGH, buttons
     );
+    let remainingDays = Preferences.get(kAutoMigrateDaysToOfferUndoPref, 0);
+    Services.telemetry.getHistogramById("FX_STARTUP_MIGRATION_UNDO_OFFERED").add(4 - remainingDays);
   },
 
-
-  /**
-   * Return true if we have shown the prompt to user several days.
-   * (defined in kAutoMigrateDaysToOfferUndoPref)
-   */
-  isMigratePromptExpired() {
+  shouldStillShowUndoPrompt() {
     let today = new Date();
     // Round down to midnight:
     today = new Date(today.getFullYear(), today.getMonth(), today.getDate());
     // We store the unix timestamp corresponding to midnight on the last day
     // on which we prompted. Fetch that and compare it to today's date.
     // (NB: stored as a string because int prefs are too small for unix
     // timestamps.)
     let previousPromptDateMsStr = Preferences.get(kAutoMigrateLastUndoPromptDateMsPref, "0");
     let previousPromptDate = new Date(parseInt(previousPromptDateMsStr, 10));
     if (previousPromptDate < today) {
       let remainingDays = Preferences.get(kAutoMigrateDaysToOfferUndoPref, 4) - 1;
       Preferences.set(kAutoMigrateDaysToOfferUndoPref, remainingDays);
       Preferences.set(kAutoMigrateLastUndoPromptDateMsPref, today.valueOf().toString());
       if (remainingDays <= 0) {
-        return true;
+        return false;
       }
     }
-    return false;
+    return true;
   },
 
   UNDO_REMOVED_REASON_UNDO_USED: 0,
   UNDO_REMOVED_REASON_SYNC_SIGNIN: 1,
   UNDO_REMOVED_REASON_PASSWORD_CHANGE: 2,
   UNDO_REMOVED_REASON_BOOKMARK_CHANGE: 3,
   UNDO_REMOVED_REASON_OFFER_EXPIRED: 4,
   UNDO_REMOVED_REASON_OFFER_REJECTED: 5,
@@ -677,27 +651,11 @@ const AutoMigrate = {
     let url = Services.urlFormatter.formatURL(rawURL);
     url = url.replace("%IMPORTEDBROWSER%", encodeURIComponent(migrationBrowser));
     chromeWindow.openUILinkIn(url, "tab");
   },
 
   QueryInterface: XPCOMUtils.generateQI(
     [Ci.nsIObserver, Ci.nsINavBookmarkObserver, Ci.nsISupportsWeakReference]
   ),
-
-  /**
-   * Undo action called by the UndoNotification or by the newtab
-   * @param chromeWindow A reference to the window in which to open a link.
-   */
-  undoAutoMigration(chromeWindow) {
-    this._maybeOpenUndoSurveyTab(chromeWindow);
-    this.undo();
-  },
-
-  /**
-   * Keep the automigration result and not prompt anymore
-   */
-  keepAutoMigration() {
-    this._purgeUndoState(this.UNDO_REMOVED_REASON_OFFER_REJECTED);
-  },
 };
 
 AutoMigrate.init();
--- a/browser/components/migration/MigrationUtils.jsm
+++ b/browser/components/migration/MigrationUtils.jsm
@@ -1105,17 +1105,16 @@ this.MigrationUtils = Object.freeze({
 
   gAvailableMigratorKeys,
 
   MIGRATION_ENTRYPOINT_UNKNOWN: 0,
   MIGRATION_ENTRYPOINT_FIRSTRUN: 1,
   MIGRATION_ENTRYPOINT_FXREFRESH: 2,
   MIGRATION_ENTRYPOINT_PLACES: 3,
   MIGRATION_ENTRYPOINT_PASSWORDS: 4,
-  MIGRATION_ENTRYPOINT_NEWTAB: 5,
 
   _sourceNameToIdMapping: {
     "nothing":    1,
     "firefox":    2,
     "edge":       3,
     "ie":         4,
     "chrome":     5,
     "chromium":   6,
--- a/browser/components/nsBrowserGlue.js
+++ b/browser/components/nsBrowserGlue.js
@@ -144,17 +144,17 @@ const listeners = {
     // PLEASE KEEP THIS LIST IN SYNC WITH THE LISTENERS ADDED IN ContentPrefServiceParent.init
     "FeedConverter:addLiveBookmark": ["Feeds"],
     "WCCR:setAutoHandler": ["Feeds"],
     "webrtc:UpdateGlobalIndicators": ["webrtcUI"],
     "webrtc:UpdatingIndicators": ["webrtcUI"],
   },
 
   mm: {
-    "AboutHome:MaybeShowMigrateMessage": ["AboutHome"],
+    "AboutHome:MaybeShowAutoMigrationUndoNotification": ["AboutHome"],
     "AboutHome:RequestUpdate": ["AboutHome"],
     "Content:Click": ["ContentClick"],
     "ContentSearch": ["ContentSearch"],
     "FormValidation:ShowPopup": ["FormValidationHandler"],
     "FormValidation:HidePopup": ["FormValidationHandler"],
     "Prompt:Open": ["RemotePrompt"],
     "Reader:ArticleGet": ["ReaderParent"],
     "Reader:FaviconRequest": ["ReaderParent"],
--- a/browser/locales/en-US/chrome/browser/browser.dtd
+++ b/browser/locales/en-US/chrome/browser/browser.dtd
@@ -379,25 +379,36 @@ These should match what Safari and other
 <!ENTITY appMenuRemoteTabs.signin.label "Sign in to Sync">
 <!ENTITY appMenuRemoteTabs.managedevices.label "Manage Devices…">
 <!ENTITY appMenuRemoteTabs.sidebar.label "View Synced Tabs Sidebar">
 
 <!ENTITY customizeMenu.addToToolbar.label "Add to Toolbar">
 <!ENTITY customizeMenu.addToToolbar.accesskey "A">
 <!ENTITY customizeMenu.addToPanel.label "Add to Menu">
 <!ENTITY customizeMenu.addToPanel.accesskey "M">
+<!-- LOCALIZATION NOTE (customizeMenu.addToOverflowMenu.label,
+     customizeMenu.pinToOverflowMenu.label, customizeMenu.unpinFromOverflowMenu.label)
+     The overflow menu is the menu that appears if you click the chevron (>> button)
+     in the location bar. These labels are only used in Photon, where you can put
+     items into this menu permanently (pinned). -->
+<!ENTITY customizeMenu.addToOverflowMenu.label "Add to Overflow Menu">
+<!ENTITY customizeMenu.addToOverflowMenu.accesskey "M">
 <!ENTITY customizeMenu.moveToToolbar.label "Move to Toolbar">
 <!ENTITY customizeMenu.moveToToolbar.accesskey "o">
-<!-- LOCALIZATION NOTE (customizeMenu.moveToPanel.accesskey) can appear on the
-     same context menu as menubarCmd and personalbarCmd, so they should have
-     different access keys. customizeMenu.moveToToolbar and 
+<!-- LOCALIZATION NOTE (customizeMenu.moveToPanel.accesskey, customizeMenu.pinToOverflowMenu.accesskey)
+     can appear on the same context menu as menubarCmd and personalbarCmd,
+     so they should have different access keys. customizeMenu.moveToToolbar and
      customizeMenu.moveToPanel are mutually exclusive, so can share access
      keys.  -->
 <!ENTITY customizeMenu.moveToPanel.label "Move to Menu">
 <!ENTITY customizeMenu.moveToPanel.accesskey "o">
+<!ENTITY customizeMenu.pinToOverflowMenu.label "Pin to Overflow Menu">
+<!ENTITY customizeMenu.pinToOverflowMenu.accesskey "P">
+<!ENTITY customizeMenu.unpinFromOverflowMenu.label "Unpin from Overflow Menu">
+<!ENTITY customizeMenu.unpinFromOverflowMenu.accesskey "U">
 <!ENTITY customizeMenu.removeFromToolbar.label "Remove from Toolbar">
 <!ENTITY customizeMenu.removeFromToolbar.accesskey "R">
 <!ENTITY customizeMenu.removeFromMenu.label "Remove from Menu">
 <!ENTITY customizeMenu.removeFromMenu.accesskey "R">
 <!ENTITY customizeMenu.addMoreItems.label "Add More Items…">
 <!ENTITY customizeMenu.addMoreItems.accesskey "A">
 
 <!-- LOCALIZATION NOTE (moreMenu.label) This label is used in the new Photon
--- a/browser/locales/en-US/chrome/browser/migration/migration.properties
+++ b/browser/locales/en-US/chrome/browser/migration/migration.properties
@@ -67,21 +67,21 @@ 64_edge=Other Data
 64_safari=Other Data
 64_chrome=Other Data
 64_firefox_other=Other Data
 64_360se=Other Data
 
 128_firefox=Windows and Tabs
 
 # Automigration undo notification.
-# %1$S will be replaced with brandShortName, %2$S will be replaced with the name of the browser we imported from
-automigration.undo.message2.all              = Dive right into %1$S! Import your favorate sites, bookmarks, history and passwords from %2$S.
-automigration.undo.message2.bookmarks        = Dive right into %1$S! Import your favorate sites and bookmarks from %2$S.
-automigration.undo.message2.bookmarks.logins = Dive right into %1$S! Import your favorate sites, bookmarks and passwords from %2$S.
-automigration.undo.message2.bookmarks.visits = Dive right into %1$S! Import your favorate sites, bookmarks and history from %2$S.
-automigration.undo.message2.logins           = Dive right into %1$S! Import your passwords from %2$S.
-automigration.undo.message2.logins.visits    = Dive right into %1$S! Import your favorate sites, history and passwords from %2$S.
-automigration.undo.message2.visits           = Dive right into %1$S! Import your favorate sites and history from %2$S.
+# %1$S will be replaced with the name of the browser we imported from, %2$S will be replaced with brandShortName
+automigration.undo.message.all              = Pick up where you left off. We’ve imported these sites and your bookmarks, history and passwords from %1$S into %2$S.
+automigration.undo.message.bookmarks        = Pick up where you left off. We’ve imported these sites and your bookmarks from %1$S into %2$S.
+automigration.undo.message.bookmarks.logins = Pick up where you left off. We’ve imported these sites and your bookmarks and passwords from %1$S into %2$S.
+automigration.undo.message.bookmarks.visits = Pick up where you left off. We’ve imported these sites and your bookmarks and history from %1$S into %2$S.
+automigration.undo.message.logins           = Pick up where you left off. We’ve imported your passwords from %1$S into %2$S.
+automigration.undo.message.logins.visits    = Pick up where you left off. We’ve imported these sites and your history and passwords from %1$S into %2$S.
+automigration.undo.message.visits           = Pick up where you left off. We’ve imported these sites and your history from %1$S into %2$S.
 automigration.undo.keep2.label            = OK, Got it
 automigration.undo.keep2.accesskey        = O
 automigration.undo.dontkeep2.label        = No Thanks
 automigration.undo.dontkeep2.accesskey    = N
 automigration.undo.unknownbrowser         = Unknown Browser
--- a/browser/modules/AboutHome.jsm
+++ b/browser/modules/AboutHome.jsm
@@ -5,18 +5,18 @@
 "use strict";
 
 var Cc = Components.classes;
 var Ci = Components.interfaces;
 var Cu = Components.utils;
 
 this.EXPORTED_SYMBOLS = [ "AboutHomeUtils", "AboutHome" ];
 
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
+Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+Components.utils.import("resource://gre/modules/Services.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "AppConstants",
   "resource://gre/modules/AppConstants.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "AutoMigrate",
   "resource:///modules/AutoMigrate.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "fxAccounts",
   "resource://gre/modules/FxAccounts.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils",
@@ -144,22 +144,18 @@ var AboutHome = {
       case "AboutHome:Settings":
         window.openPreferences(undefined, {origin: "aboutHome"} );
         break;
 
       case "AboutHome:RequestUpdate":
         this.sendAboutHomeData(aMessage.target);
         break;
 
-      case "AboutHome:MaybeShowMigrateMessage":
-        AutoMigrate.shouldShowMigratePrompt(aMessage.target).then((prompt) => {
-          if (prompt) {
-            AutoMigrate.showUndoNotificationBar(aMessage.target);
-          }
-        });
+      case "AboutHome:MaybeShowAutoMigrationUndoNotification":
+        AutoMigrate.maybeShowUndoNotification(aMessage.target);
         break;
     }
   },
 
   // Send all the chrome-privileged data needed by about:home. This
   // gets re-sent when the search engine changes.
   sendAboutHomeData(target) {
     let wrapper = {};
--- a/browser/modules/AboutNewTab.jsm
+++ b/browser/modules/AboutNewTab.jsm
@@ -27,26 +27,18 @@ var AboutNewTab = {
   isOverridden: false,
 
   init() {
     if (this.isOverridden) {
       return;
     }
     this.pageListener = new RemotePages("about:newtab");
     this.pageListener.addMessageListener("NewTab:Customize", this.customize.bind(this));
-    this.pageListener.addMessageListener("NewTab:MaybeShowMigrateMessage",
-      this.maybeShowMigrateMessage.bind(this));
-  },
-
-  maybeShowMigrateMessage({ target }) {
-    AutoMigrate.shouldShowMigratePrompt(target.browser).then((prompt) => {
-      if (prompt) {
-        AutoMigrate.showUndoNotificationBar(target.browser);
-      }
-    });
+    this.pageListener.addMessageListener("NewTab:MaybeShowAutoMigrationUndoNotification",
+      (msg) => AutoMigrate.maybeShowUndoNotification(msg.target.browser));
   },
 
   customize(message) {
     NewTabUtils.allPages.enabled = message.data.enabled;
     NewTabUtils.allPages.enhanced = message.data.enhanced;
   },
 
   uninit() {
--- a/gfx/layers/FrameMetrics.h
+++ b/gfx/layers/FrameMetrics.h
@@ -1099,14 +1099,23 @@ struct ZoomConstraints {
   }
 
   bool operator!=(const ZoomConstraints& other) const
   {
     return !(*this == other);
   }
 };
 
+struct ScrollableLayerGuidHash
+{
+  std::size_t operator()(const ScrollableLayerGuid& Guid) const
+  {
+    return Guid.Hash();
+  }
+};
+
+
 typedef Maybe<ZoomConstraints> MaybeZoomConstraints;
 
 } // namespace layers
 } // namespace mozilla
 
 #endif /* GFX_FRAMEMETRICS_H */
--- a/gfx/layers/apz/src/APZCTreeManager.cpp
+++ b/gfx/layers/apz/src/APZCTreeManager.cpp
@@ -81,17 +81,17 @@ struct APZCTreeManager::TreeBuildingStat
   // A list of nodes that need to be destroyed at the end of the tree building.
   // This is initialized with all nodes in the old tree, and nodes are removed
   // from it as we reuse them in the new tree.
   nsTArray<RefPtr<HitTestingTreeNode>> mNodesToDestroy;
 
   // This map is populated as we place APZCs into the new tree. Its purpose is
   // to facilitate re-using the same APZC for different layers that scroll
   // together (and thus have the same ScrollableLayerGuid).
-  std::map<ScrollableLayerGuid, AsyncPanZoomController*> mApzcMap;
+  std::unordered_map<ScrollableLayerGuid, AsyncPanZoomController*, ScrollableLayerGuidHash> mApzcMap;
 };
 
 class APZCTreeManager::CheckerboardFlushObserver : public nsIObserver {
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_NSIOBSERVER
 
   explicit CheckerboardFlushObserver(APZCTreeManager* aTreeManager)
@@ -375,17 +375,17 @@ APZCTreeManager::PushStateToWR(wr::WebRe
 
   MutexAutoLock lock(mTreeLock);
 
   // During the first pass through the tree, we build a cache of guid->HTTN so
   // that we can find the relevant APZC instances quickly in subsequent passes,
   // such as the one below to generate scrollbar transforms. Without this, perf
   // could end up being O(n^2) instead of O(n log n) because we'd have to search
   // the tree to find the corresponding APZC every time we hit a thumb node.
-  std::map<ScrollableLayerGuid, HitTestingTreeNode*> httnMap;
+  std::unordered_map<ScrollableLayerGuid, HitTestingTreeNode*, ScrollableLayerGuidHash> httnMap;
 
   bool activeAnimations = false;
   uint64_t lastLayersId = -1;
   WrPipelineId lastPipelineId;
 
   // We iterate backwards here because the HitTestingTreeNode is optimized
   // for backwards iteration. The equivalent code in AsyncCompositionManager
   // iterates forwards, but the direction shouldn't really matter in practice
@@ -533,16 +533,18 @@ GetEventRegions(const ScrollNode& aLayer
     nsIntRegion hitRegion(compositionBounds.ToUnknownRect());
     EventRegions eventRegions(hitRegion);
     eventRegions.mDispatchToContentHitRegion = eventRegions.mHitRegion;
     return eventRegions;
   }
   return aLayer.GetEventRegions();
 }
 
+
+
 already_AddRefed<HitTestingTreeNode>
 APZCTreeManager::RecycleOrCreateNode(TreeBuildingState& aState,
                                      AsyncPanZoomController* aApzc,
                                      uint64_t aLayersId)
 {
   // Find a node without an APZC and return it. Note that unless the layer tree
   // actually changes, this loop should generally do an early-return on the
   // first iteration, so it should be cheap in the common case.
--- a/gfx/layers/apz/src/APZCTreeManager.h
+++ b/gfx/layers/apz/src/APZCTreeManager.h
@@ -1,17 +1,17 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 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/. */
 
 #ifndef mozilla_layers_APZCTreeManager_h
 #define mozilla_layers_APZCTreeManager_h
 
-#include <map>                          // for std::map
+#include <unordered_map>                          // for std::unordered_map
 
 #include "gfxPoint.h"                   // for gfxPoint
 #include "mozilla/Assertions.h"         // for MOZ_ASSERT_HELPER2
 #include "mozilla/gfx/Logging.h"        // for gfx::TreeLog
 #include "mozilla/gfx/Matrix.h"         // for Matrix4x4
 #include "mozilla/layers/TouchCounter.h"// for TouchCounter
 #include "mozilla/layers/IAPZCTreeManager.h" // for IAPZCTreeManager
 #include "mozilla/Mutex.h"              // for Mutex
@@ -36,16 +36,17 @@ namespace layers {
 
 class Layer;
 class AsyncPanZoomController;
 class APZCTreeManagerParent;
 class CompositorBridgeParent;
 class OverscrollHandoffChain;
 struct OverscrollHandoffState;
 struct FlingHandoffState;
+struct ScrollableLayerGuidHash;
 class LayerMetricsWrapper;
 class InputQueue;
 class GeckoContentController;
 class HitTestingTreeNode;
 class WebRenderScrollData;
 
 /**
  * ****************** NOTE ON LOCK ORDERING IN APZ **************************
@@ -541,17 +542,17 @@ private:
    * lock also needs to be held when accessing the mRootNode instance variable, as that
    * is considered part of the APZC tree management state.
    * Finally, the lock needs to be held when accessing mZoomConstraints.
    * IMPORTANT: See the note about lock ordering at the top of this file. */
   mutable mozilla::Mutex mTreeLock;
   RefPtr<HitTestingTreeNode> mRootNode;
   /* Holds the zoom constraints for scrollable layers, as determined by the
    * the main-thread gecko code. */
-  std::map<ScrollableLayerGuid, ZoomConstraints> mZoomConstraints;
+  std::unordered_map<ScrollableLayerGuid, ZoomConstraints, ScrollableLayerGuidHash> mZoomConstraints;
   /* This tracks the APZC that should receive all inputs for the current input event block.
    * This allows touch points to move outside the thing they started on, but still have the
    * touch events delivered to the same initial APZC. This will only ever be touched on the
    * input delivery thread, and so does not require locking.
    */
   RefPtr<AsyncPanZoomController> mApzcForInputBlock;
   /* The hit result for the current input event block; this should always be in
    * sync with mApzcForInputBlock.
--- a/js/src/devtools/rootAnalysis/analyzeHeapWrites.js
+++ b/js/src/devtools/rootAnalysis/analyzeHeapWrites.js
@@ -86,16 +86,17 @@ function checkOverridableVirtualCall(ent
     if (hasThreadsafeReferenceCounts(entry, /nsCOMPtr<T>::assign_with_AddRef.*?\[with T = (.*?)\]/))
         return;
 
     // Watch for raw addref/release.
     var whitelist = [
         "Gecko_AddRefAtom",
         "Gecko_ReleaseAtom",
         /nsPrincipal::Get/,
+        /CounterStylePtr::Reset/,
     ];
     if (entry.matches(whitelist))
         return;
 
     dumpError(entry, location, "AddRef/Release on nsISupports");
 }
 
 function checkIndirectCall(entry, location, callee)
@@ -140,18 +141,20 @@ function treatAsSafeArgument(entry, varN
         // RawGeckoBorrowedNode thread-mutable parameters.
         ["Gecko_SetNodeFlags", "aNode", null],
         ["Gecko_UnsetNodeFlags", "aNode", null],
 
         // Various Servo binding out parameters. This is a mess and there needs
         // to be a way to indicate which params are out parameters, either using
         // an attribute or a naming convention.
         ["Gecko_CopyFontFamilyFrom", "dst", null],
-        ["Gecko_SetListStyleType", "aList", null],
-        ["Gecko_CopyListStyleTypeFrom", "aDst", null],
+        ["Gecko_SetCounterStyleToName", "aPtr", null],
+        ["Gecko_SetCounterStyleToSymbols", "aPtr", null],
+        ["Gecko_SetCounterStyleToString", "aPtr", null],
+        ["Gecko_CopyCounterStyle", "aDst", null],
         ["Gecko_SetMozBinding", "aDisplay", null],
         [/ClassOrClassList/, /aClass/, null],
         ["Gecko_GetAtomAsUTF16", "aLength", null],
         ["Gecko_CopyMozBindingFrom", "aDest", null],
         ["Gecko_SetNullImageValue", "aImage", null],
         ["Gecko_SetGradientImageValue", "aImage", null],
         ["Gecko_SetImageOrientation", "aVisibility", null],
         ["Gecko_SetImageOrientationAsFromImage", "aVisibility", null],
@@ -208,16 +211,17 @@ function treatAsSafeArgument(entry, varN
         ["Gecko_CopyShapeSourceFrom", "aDst", null],
         ["Gecko_DestroyShapeSource", "aShape", null],
         ["Gecko_StyleShapeSource_SetURLValue", "aShape", null],
         ["Gecko_nsFont_InitSystem", "aDest", null],
         ["Gecko_nsStyleFont_FixupNoneGeneric", "aFont", null],
         ["Gecko_StyleTransition_SetUnsupportedProperty", "aTransition", null],
         ["Gecko_AddPropertyToSet", "aPropertySet", null],
         ["Gecko_CalcStyleDifference", "aAnyStyleChanged", null],
+        ["Gecko_nsStyleSVG_CopyContextProperties", "aDst", null],
     ];
     for (var [entryMatch, varMatch, csuMatch] of whitelist) {
         assert(entryMatch || varMatch || csuMatch);
         if (entryMatch && !nameMatches(entry.name, entryMatch))
             continue;
         if (varMatch && !nameMatches(varName, varMatch))
             continue;
         if (csuMatch && (!csuName || !nameMatches(csuName, csuMatch)))
@@ -321,17 +325,19 @@ function ignoreCallEdge(entry, callee)
     if (/::SetName/.test(callee) &&
         /::UnlabeledDispatch/.test(name))
     {
         return true;
     }
 
     // We manually lock here
     if (name == "Gecko_nsFont_InitSystem" ||
-        name == "Gecko_GetFontMetrics")
+        name == "Gecko_GetFontMetrics" ||
+        name == "Gecko_nsStyleFont_FixupNoneGeneric" ||
+        name == "Gecko_nsStyleFont_FixupMinFontSize")
     {
         return true;
     }
 
     return false;
 }
 
 function ignoreContents(entry)
--- a/layout/base/nsPresContext.h
+++ b/layout/base/nsPresContext.h
@@ -578,18 +578,21 @@ public:
   float EffectiveTextZoom() const { return mEffectiveTextZoom; }
 
   /**
    * Get the minimum font size for the specified language. If aLanguage
    * is nullptr, then the document's language is used.  This combines
    * the language-specific global preference with the per-presentation
    * base minimum font size.
    */
-  int32_t MinFontSize(nsIAtom *aLanguage) const {
-    const LangGroupFontPrefs *prefs = GetFontPrefsForLang(aLanguage);
+  int32_t MinFontSize(nsIAtom *aLanguage, bool* aNeedsToCache = nullptr) const {
+    const LangGroupFontPrefs *prefs = GetFontPrefsForLang(aLanguage, aNeedsToCache);
+    if (aNeedsToCache && *aNeedsToCache) {
+      return 0;
+    }
     return std::max(mBaseMinFontSize, prefs->mMinimumFontSize);
   }
 
   /**
    * Get the per-presentation base minimum font size.  This size is
    * independent of the language-specific global preference.
    */
   int32_t BaseMinFontSize() const {
--- a/layout/reftests/bidi/reftest.list
+++ b/layout/reftests/bidi/reftest.list
@@ -111,17 +111,17 @@ fails-if(webrender) == 413928-1.html 413
 == 612843-1.html 612843-1-ref.html
 == 613149-1a.html 613149-1-ref.html
 == 613149-1b.html 613149-1-ref.html
 fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)&&!layersGPUAccelerated&&!azureSkia,36,2) == 613149-2a.html 613149-2-ref.html
 fuzzy-if(Android,24,1) fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)&&!layersGPUAccelerated&&!azureSkia,36,2) == 613149-2b.html 613149-2-ref.html
 == 613157-1.html 613157-1-ref.html
 fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)&&!layersGPUAccelerated&&!azureSkia,255,6) == 613157-2.html 613157-2-ref.html
 == 662288-1.html 662288-1-ref.html
-fails-if(styloVsGecko) == 670226-1.html 670226-1-ref.html
+fails-if(styloVsGecko||stylo) == 670226-1.html 670226-1-ref.html
 == 676245-1.html 676245-1-ref.html
 fuzzy-if(skiaContent,1,3) fails-if(styloVsGecko) == 698291-1.html 698291-1-ref.html
 == 698706-1.html 698706-1-ref.html
 == 704837-1.html 704837-1-ref.html
 == 712600-1.html 712600-1-ref.html
 == 712600-2.html 712600-2-ref.html
 == 712600-2-dyn.html 712600-2-ref.html
 == 712600-3.html 712600-3-ref.html
@@ -164,12 +164,12 @@ fuzzy-if(Android,254,557) == brackets-2a
 == brackets-2b-ltr.html brackets-2b-ltr-ref.html
 == brackets-2b-rtl.html brackets-2b-rtl-ref.html
 == brackets-2c-ltr.html brackets-2c-ltr-ref.html
 fuzzy-if(Android,254,231) == brackets-2c-rtl.html brackets-2c-rtl-ref.html
 == brackets-3a-ltr.html brackets-3a-ltr-ref.html
 == brackets-3a-rtl.html brackets-3a-rtl-ref.html
 == brackets-3b-ltr.html brackets-3b-ltr-ref.html
 == brackets-3b-rtl.html brackets-3b-rtl-ref.html
-fails-if(styloVsGecko) == 1217833-1.html 1217833-1-ref.html
-fails-if(styloVsGecko) == 1217833-2.html 1217833-2-ref.html
+fails-if(styloVsGecko||stylo) == 1217833-1.html 1217833-1-ref.html
+fails-if(styloVsGecko||stylo) == 1217833-2.html 1217833-2-ref.html
 == 1231175-1.html 1231175-1-ref.html
 == 1366623-1.html 1366623-1-ref.html
--- a/layout/reftests/bugs/reftest.list
+++ b/layout/reftests/bugs/reftest.list
@@ -89,20 +89,20 @@ fails-if(styloVsGecko) != 82711-1-ref.ht
 fails-if(styloVsGecko) != 82711-1-ref.html 82711-3-ref.html
 fails-if(styloVsGecko) != 82711-2-ref.html 82711-3-ref.html
 fuzzy-if(Android,4,1) == 84400-1.html 84400-1-ref.html
 fuzzy-if(skiaContent,2,13) == 84400-2.html 84400-2-ref.html
 == 97777-1.html 97777-1-ref.html
 == 97777-2.html 97777-2-ref.html
 == 98223-1.html 98223-1-ref.html
 == 98223-2.html 98223-2-ref.html
-fails-if(styloVsGecko) == 99850-1a.html 99850-1-ref.html
+fails-if(styloVsGecko||stylo) == 99850-1a.html 99850-1-ref.html
 random == 99850-1b.html 99850-1-ref.html # bug 471629
-fails-if(styloVsGecko) == 99850-1c.html 99850-1-ref.html
-fails-if(styloVsGecko) == 99850-1d.html 99850-1-ref.html
+fails-if(styloVsGecko||stylo) == 99850-1c.html 99850-1-ref.html
+fails-if(styloVsGecko||stylo) == 99850-1d.html 99850-1-ref.html
 == 105030-1.html 105030-1-ref.html
 == 109735-1.html 109735-1-ref.html
 == 116882-1.html 116882-1-ref.html
 == 120834-1a.html 120834-1-ref.html
 == 120834-2a.html 120834-2-ref.html
 == 120834-2b.html 120834-2-ref.html
 == 120834-2c.html 120834-2-ref.html
 == 120834-2d.html 120834-2-ref.html
@@ -461,17 +461,17 @@ fuzzy-if(skiaContent,2,3) == 339289-1.ht
 == 345267-1d.html 345267-1-ref.html
 != 345563-sub.xhtml 345563-sup.xhtml
 fuzzy-if(skiaContent,4,2) == 346774-1a.html 346774-1-ref.html
 fuzzy-if(skiaContent,4,2) == 346774-1b.html 346774-1-ref.html
 fuzzy-if(skiaContent,4,2) == 346774-1c.html 346774-1-ref.html
 == 347348-1.xhtml 347348-1-ref.xhtml
 == 347496-1.xhtml 347496-1-ref.xhtml
 == 347912-1.html 347912-1-ref.html
-fails-if(styloVsGecko) == 348049-1.xhtml 348049-1-ref.xhtml
+fails-if(styloVsGecko||stylo) == 348049-1.xhtml 348049-1-ref.xhtml
 == 348516-1.html 348516-1-ref.html
 == 348516-2.html 348516-2-ref.html
 != 348516-2.html 348516-2-notref.html
 != 348516-3.html 348516-3-notref.html
 == 348597-1.html 348597-ref.html
 == 348809-1a.html 348809-1-ref.html
 == 348809-1b.html 348809-1-ref.html
 == 348809-1c.html 348809-1-ref.html
@@ -784,17 +784,17 @@ fails-if(!styloVsGecko) == 387344-1.html
 skip-if(!winWidget) == 391045.html 391045-ref.html # windows-specific Uniscribe bug, trailing period is matched against different fonts on Mac/Linux (see 396137)
 == 391140-1.html 391140-1-ref.html
 == 391412-1a.html 391412-1-ref.html
 == 391412-1b.html 391412-1-ref.html
 == 391909-1.html 391909-1-ref.html
 skip-if(Android) == 391979.html 391979-ref.html
 == 391994-1.html 391994-1-ref.html
 == 392047.html 392047-ref.html
-fails-if(styloVsGecko) == 392435-1.html 392435-1-ref.html
+fails-if(styloVsGecko||stylo) == 392435-1.html 392435-1-ref.html
 == 393330-1.html 393330-1-ref.html
 == 393490-1.html 393490-1-ref.html
 == 393517-1.xhtml about:blank  # crash test
 fuzzy-if(skiaContent,1,600) == 393649-1.html 393649-1-ref.html
 == 393655-1.html 393655-1-ref.html
 == 393655-2.html 393655-2-ref.html
 == 393655-3.html 393655-3-ref.html
 == 393655-4.html 393655-4-ref.html
@@ -841,17 +841,17 @@ fails-if(winWidget) fails-if(cocoaWidget
 == 400171-1a.html 400171-1-ref.html
 == 400171-1b.html 400171-1-ref.html
 == 400171-1c.html 400171-1-ref.html
 == 400171-2a.html 400171-2-ref.html
 == 400171-2b.html 400171-2-ref.html
 == 400171-2c.html 400171-2-ref.html
 == 400421-1.html 400421-1-ref.html
 == 400813-1.html 400813-1-ref.html
-fails-if(styloVsGecko) == 400826-1.html 400826-1-ref.html
+fails-if(styloVsGecko||stylo) == 400826-1.html 400826-1-ref.html
 == 401946-1.xul about:blank
 == 402338-1.html 402338-1-ref.html
 == 402567-1.html 402567-1-ref.html
 == 402567-2.html 402567-2-ref.html
 == 402567-3.html 402567-3-ref.html
 fuzzy-if(gtkWidget,2,40) == 402567-4.html 402567-4-ref.html
 fuzzy-if(skiaContent,2,5) == 402629-1.html 402629-1-ref.html
 fuzzy-if(skiaContent,2,5) == 402629-2.html 402629-2-ref.html
@@ -976,17 +976,17 @@ fuzzy-if(Android,11,17) == 413361-1.html
 == 413840-ltr-offsets.html 413840-ltr-offsets-ref.html
 == 413840-rtl-offsets.html 413840-rtl-offsets-ref.html
 == 413840-pushed-line-bullet.html 413840-pushed-line-bullet-ref.html
 == 413840-bullet-first-line.html 413840-bullet-first-line-ref.html
 == 413982.html 413982-ref.html
 == 414123.xhtml 414123-ref.xhtml
 == 414638.html 414638-ref.html
 == 414851-1.html 414851-1-ref.html
-fails-if(styloVsGecko) == 416106-1.xhtml 416106-1-ref.xhtml
+fails-if(styloVsGecko||stylo) == 416106-1.xhtml 416106-1-ref.xhtml
 == 416752-1.html 416752-1-ref.html
 == 417178-1.html 417178-1-ref.html
 == 417246-1.html 417246-1-ref.html
 == 417676.html 417676-ref.html
 asserts(1) asserts-if(styloVsGecko,2) == 418574-1.html 418574-1-ref.html # bug 478135
 asserts(1) asserts-if(styloVsGecko,2) == 418574-2.html 418574-2-ref.html # bug 478135
 == 418766-1a.html 418766-1-ref.html
 == 418766-1b.html 418766-1-ref.html
@@ -1240,17 +1240,17 @@ fuzzy-if(skiaContent,1,12000) == 461512-
 == 466258-1.html 466258-1-ref.html
 == 466395-1.html 466395-1-ref.html
 == 466395-2.html 466395-2-ref.html
 == 467084-1.html 467084-1-ref.html
 == 467084-2.html 467084-2-ref.html
 == 467444-1.html 467444-1-ref.html
 == 467460-1.html 467460-1-ref.html
 == 468473-1.xul 468473-1-ref.xul
-fails-if(styloVsGecko) == 468546-1.xhtml 468546-1-ref.xhtml
+fails-if(styloVsGecko||stylo) == 468546-1.xhtml 468546-1-ref.xhtml
 == 471356-1.html 471356-1-ref.html
 == 471594-1.xhtml 471594-1-ref.html
 fuzzy(255,15) == 472020-1a.xul 472020-1-ref.xul
 fails-if(!styloVsGecko) == 472020-1b.xul 472020-1-ref.xul
 fails-if(!styloVsGecko) == 472020-2.xul 472020-2-ref.xul
 == 472500-1.xul 472500-1-ref.xul
 == 472769-1a.html 472769-1-ref.html
 == 472769-1b.html 472769-1-ref.html
@@ -1316,18 +1316,18 @@ fails-if(Android) == 481024-1a.html 4810
 fails-if(Android) == 481024-1b.html 481024-1-ref.html
 fails-if(Android) == 481024-1c.html 481024-1-ref.html
 == 481024-1d.html 481024-1-ref.html
 == 481024-1e.html 481024-1-ref.html
 != 481948-1.html 481948-1-ref.html
 != 481948-2.html 481948-2-ref.html
 fails-if(Android) random-if(winWidget) fails-if(gtkWidget&&!styloVsGecko) == 481948-3.html 481948-3-ref.html # questionable test, see bug 488364
 == 482398-1.html 482398-1-ref.html
-random-if(d2d) fails-if(styloVsGecko) == 482592-1a.xhtml 482592-1-ref.html # bug 586771
-random-if(d2d) fails-if(styloVsGecko) == 482592-1b.xhtml 482592-1-ref.html # bug 586771
+random-if(d2d) fails-if(styloVsGecko||stylo) == 482592-1a.xhtml 482592-1-ref.html # bug 586771
+random-if(d2d) fails-if(styloVsGecko||stylo) == 482592-1b.xhtml 482592-1-ref.html # bug 586771
 random-if(winWidget) fuzzy-if(skiaContent,1,5) == 482659-1a.html 482659-1-ref.html
 fuzzy-if(skiaContent,1,5) == 482659-1b.html 482659-1-ref.html
 fuzzy-if(skiaContent,1,5) == 482659-1c.html 482659-1-ref.html
 fuzzy-if(skiaContent,1,5) == 482659-1d.html 482659-1-ref.html
 == 483565.xul 483565-ref.xul
 == 484256-1.html 484256-1-ref.html
 == 484256-2.html 484256-1-ref.html
 == 485012-1.html 485012-1-ref.html
@@ -1359,18 +1359,18 @@ pref(browser.display.focus_ring_width,1)
 pref(browser.display.focus_ring_width,1) == 491180-2.html 491180-2-ref.html
 == 491323-1.xul 491323-1-ref.xul
 == 492239-1.xul 492239-1-ref.xul
 == 492661-1.html 492661-1-ref.html
 == 493968-1.html 493968-1-ref.html
 == 494667-1.html 494667-1-ref.html
 == 494667-2.html 494667-2-ref.html
 == 495274-1.html 495274-1-ref.html
-fails-if(styloVsGecko) == 495354-1a.xhtml 495354-1-ref.xhtml
-fails-if(styloVsGecko) == 495354-1b.xhtml 495354-1-ref.xhtml
+fails-if(styloVsGecko||stylo) == 495354-1a.xhtml 495354-1-ref.xhtml
+fails-if(styloVsGecko||stylo) == 495354-1b.xhtml 495354-1-ref.xhtml
 == 495385-1a.html 495385-1-ref.html
 == 495385-1b.html 495385-1-ref.html
 == 495385-1c.html 495385-1-ref.html
 == 495385-1d.html 495385-1-ref.html
 == 495385-1e.html 495385-1-ref.html
 == 495385-1f.html 495385-1-ref.html
 == 495385-2a.html 495385-2-ref.html
 == 495385-2b.html 495385-2-ref.html
@@ -1379,17 +1379,17 @@ fails-if(styloVsGecko) == 495354-1b.xhtm
 == 495385-2e.html 495385-2-ref.html
 pref(dom.use_xbl_scopes_for_remote_xul,true) == 495385-2f.xhtml 495385-2-ref.html
 == 495385-2g.html 495385-2-ref.html
 == 495385-2h.html 495385-2-ref.html
 == 495385-2i.html 495385-2-ref.html
 == 495385-3.html 495385-3-ref.html
 == 495385-4.html 495385-4-ref.html
 fails-if(styloVsGecko) == 495385-5.html 495385-5-ref.html
-fails-if(styloVsGecko) == 496032-1.html 496032-1-ref.html
+fails-if(styloVsGecko||stylo) == 496032-1.html 496032-1-ref.html
 == 496840-1.html 496840-1-ref.html
 fuzzy-if(skiaContent,1,17000) == 498228-1.xul 498228-1-ref.xul
 == 501037.html 501037-ref.html
 == 501257-1a.html 501257-1-ref.html
 == 501257-1b.html 501257-1-ref.html
 == 501257-1.xhtml 501257-1-ref.xhtml
 == 501627-1.html 501627-1-ref.html
 == 502288-1.html 502288-1-ref.html
@@ -1550,17 +1550,17 @@ needs-focus == 568441.html 568441-ref.ht
 == 569006-1.html 569006-1-ref.html
 == 571281-1a.html 571281-1-ref.html
 == 571281-1b.html 571281-1-ref.html
 == 571281-1c.html 571281-1-ref.html
 == 571347-1a.html 571347-1-ref.html
 == 571347-1b.html 571347-1-ref.html
 == 571347-2a.html 571347-2-ref.html
 == 571347-2b.html 571347-2-ref.html
-fails-if(styloVsGecko) == 571347-2c.html 571347-2-ref.html
+fails-if(styloVsGecko||stylo) == 571347-2c.html 571347-2-ref.html
 == 571347-2d.html 571347-2-ref.html
 == 571347-3.html 571347-3-ref.html
 == 572598-1.html 572598-ref.html
 == 574898-1.html 574898-ref.html
 # 574907 is a windows-only issue, result on other platforms depends on details of font support
 random-if(!winWidget) random-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu)) == 574907-1.html 574907-1-ref.html # Bug 1258240
 random-if(!winWidget) random-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu)) == 574907-2.html 574907-2-ref.html # Bug 1258240
 # 574907-3 only worked under directwrite, and even there it now depends on the rendering mode; marking as random for now
@@ -1582,18 +1582,18 @@ fuzzy-if(Android,3,256) == 582037-2a.htm
 fuzzy-if(Android,3,256) == 582037-2b.html 582037-2-ref.html
 asserts(1-2) asserts-if(styloVsGecko,4) == 582146-1.html about:blank
 == 582476-1.svg 582476-1-ref.svg
 == 584400-dash-length.svg 584400-dash-length-ref.svg
 == 584699-1.html 584699-1-ref.html
 fuzzy-if(Android,2,48) == 585598-2.xhtml 585598-2-ref.xhtml
 == 586400-1.html 586400-1-ref.html
 fuzzy-if(d2d,52,1051) == 586683-1.html 586683-1-ref.html
-fails-if(styloVsGecko) == 589615-1a.xhtml 589615-1-ref.html
-fails-if(styloVsGecko) == 589615-1b.html 589615-1-ref.html
+fails-if(styloVsGecko||stylo) == 589615-1a.xhtml 589615-1-ref.html
+fails-if(styloVsGecko||stylo) == 589615-1b.html 589615-1-ref.html
 == 589672-1.html 589672-1-ref.html
 != 589682-1.html 589682-1-notref.html
 pref(dom.meta-viewport.enabled,true) skip-if(Android) == 593243-1.html 593243-1-ref.html # bug 593168
 pref(dom.meta-viewport.enabled,true) skip-if(Android) == 593243-2.html 593243-2-ref.html # bug 593168
 == 593544-1.html 593544-1-ref.html
 random-if(Android) == 594333-1.html 594333-1-ref.html
 == 594624-1.html 594624-1-ref.html
 == 594737-1.html 594737-1-ref.html
@@ -1644,17 +1644,17 @@ skip-if(Android) == 621253-1-internalFil
 HTTP(..) == 621253-2-externalFilter.html 621253-2-ref.html
 == 621253-2-internalFilter.html 621253-2-ref.html
 random-if(winWidget) == 621918-1.svg 621918-1-ref.svg # 1-pixel diacritic positioning discrepancy in rotated text (may depend on platform fonts)
 random-if(winWidget) HTTP(..) == 621918-2.svg 621918-2-ref.svg # same 1px issue as above, and HTTP(..) for filters.svg, used to mask antialiasing issues where glyphs touch
 fuzzy-if(d2d,5,1) == 622585-1.html 622585-1-ref.html # bug 789402
 fuzzy-if(Android,8,300) fuzzy-if(skiaContent,1,40000) == 625409-1.html 625409-1-ref.html
 == 627393-1.html about:blank
 fuzzy-if(skiaContent,1,500) == 630835-1.html about:blank
-fails-if(styloVsGecko) == 631352-1.html 631352-1-ref.html
+fails-if(styloVsGecko||stylo) == 631352-1.html 631352-1-ref.html
 skip-if(!haveTestPlugin) fails-if(Android) fuzzy-if(winWidget&&!layersGPUAccelerated,102,535) fuzzy-if(skiaContent&&!Android,102,11000) HTTP == 632423-1.html 632423-1-ref.html
 skip-if(Android) random-if(winWidget||OSX==1010) == 632781-verybig.html 632781-ref.html
 == 632781-normalsize.html 632781-ref.html
 fuzzy-if(d2d&&/^Windows\x20NT\x206\.2/.test(http.oscpu),1,559) fuzzy-if(!isDebugBuild&&gtkWidget&&/^Linux\x20i686/.test(http.oscpu),102,140) == 633344-1.html 633344-1-ref.html # bug 1103623, Linux32 from GCC update
 fuzzy-if(skiaContent,1,500) == 634232-1.html 634232-1-ref.html
 fuzzy-if(skiaContent,3,120000) == 635302-1.html 635302-1-ref.html
 fuzzy(1,68) fuzzy-if(gtkWidget,1,70) fails-if(Android) fuzzy-if(skiaContent&&!Android,1,300) == 635373-1.html 635373-1-ref.html
 random-if(d2d) fails-if(Android) fuzzy-if(winWidget&&!d2d,20,118) fuzzy-if(skiaContent&&!Android,2,550) == 635373-2.html 635373-2-ref.html
@@ -1662,17 +1662,17 @@ random-if(d2d) fails-if(Android) fuzzy-i
 HTTP(..) == 635639-1.html 635639-1-ref.html
 HTTP(..) == 635639-2.html 635639-2-ref.html
 random == 637597-1.html 637597-1-ref.html # bug 637597 was never really fixed!
 fuzzy-if(Android,8,500) == 637852-1.html 637852-1-ref.html
 fuzzy-if(Android,8,500) fuzzy-if(skiaContent,2,1) == 637852-2.html 637852-2-ref.html
 fuzzy-if(Android,8,500) == 637852-3.html 637852-3-ref.html
 == 641770-1.html 641770-1-ref.html
 == 641856-1.html 641856-1-ref.html
-fails-if(styloVsGecko) == 645491-1.html 645491-1-ref.html
+fails-if(styloVsGecko||stylo) == 645491-1.html 645491-1-ref.html
 == 645647-1.html 645647-1-ref.html
 == 645647-2.html 645647-2-ref.html
 == 645768-1.html 645768-1-ref.html
 fails-if(layersGPUAccelerated&&cocoaWidget) fuzzy-if(!layersGPUAccelerated,41,260) fuzzy-if(skiaContent,57,11000) == 650228-1.html 650228-1-ref.html # Quartz alpha blending doesn't match GL alpha blending
 needs-focus == 652301-1a.html 652301-1-ref.html
 needs-focus == 652301-1b.html 652301-1-ref.html
 fuzzy-if(skiaContent,2,5) == 652775-1.html 652775-1-ref.html
 HTTP == 652991-1a.html 652991-1-ref.html
@@ -1699,35 +1699,35 @@ fails-if(styloVsGecko) == 670467-2.html 
 == 690164-1.html 690164-1-ref.html
 == 690643-1.html 690643-1-ref.html
 != 691087-1.html 691087-1-ref.html
 == 691571-1.html 691571-1-ref.html
 fuzzy-if(skiaContent,1,200) == 696307-1.html 696307-1-ref.html
 fuzzy-if(skiaContent,1,550) == 696739-1.html 696739-1-ref.html
 needs-focus fails-if(styloVsGecko) == 703186-1.html 703186-1-ref.html
 needs-focus == 703186-2.html 703186-2-ref.html
-needs-focus fails-if(styloVsGecko) != 703186-1.html 703186-2.html
+needs-focus fails-if(styloVsGecko||stylo) != 703186-1.html 703186-2.html
 == 711359-1.html 711359-1-ref.html
 == 712849-1.html 712849-1-ref.html
 == 713856-static.html  713856-ref.html
 == 713856-dynamic.html 713856-ref.html
 == 714519-1-as.html 714519-1-ref.html
 == 714519-1-q.html 714519-1-ref.html
 == 714519-2-as.html 714519-2-ref.html
 == 714519-2-q.html 714519-2-ref.html
 fuzzy-if(true,1,21) fuzzy-if(d2d,68,173) fuzzy-if(cocoaWidget,1,170) == 718521.html 718521-ref.html # bug 773482
 == 720987.html 720987-ref.html
 == 722888-1.html 722888-1-ref.html
 fuzzy(2,40000) == 722923-1.html 722923-1-ref.html
 == 723484-1.html 723484-1-ref.html
 random-if(Android) == 728983-1.html 728983-1-ref.html
 == 729143-1.html 729143-1-ref.html
-fails-if(styloVsGecko) == 731521-1.html 731521-1-ref.html
+fails-if(styloVsGecko||stylo) == 731521-1.html 731521-1-ref.html
 needs-focus fails-if(styloVsGecko) == 731726-1.html 731726-1-ref.html
-fails-if(styloVsGecko) == 735481-1.html 735481-1-ref.html
+fails-if(styloVsGecko||stylo) == 735481-1.html 735481-1-ref.html
 fuzzy-if(cocoaWidget,1,300000) fuzzy-if(skiaContent,2,300000) == 745934-1.html 745934-1-ref.html
 == 748692-1a.html 748692-1-ref.html
 == 748692-1b.html 748692-1-ref.html
 == 748803-1.html 748803-1-ref.html
 == 750551-1.html 750551-1-ref.html
 fuzzy-if(skiaContent,1,1) fails-if(styloVsGecko) == 751012-1a.html 751012-1-ref.html
 fuzzy-if(skiaContent,1,1) fails-if(styloVsGecko) == 751012-1b.html 751012-1-ref.html
 random-if(Android) == 753329-1.html about:blank
@@ -1774,21 +1774,21 @@ fuzzy-if(OSX,1,364) fuzzy-if(skiaContent
 == 848421-1.html 848421-1-ref.html
 == 849407-1.html 849407-1-ref.html
 == 849996-1.html 849996-1-ref.html
 == 858803-1.html 858803-1-ref.html
 == 860242-1.html 860242-1-ref.html
 != 860370.html 860370-notref.html
 == 871338-1.html 871338-1-ref.html
 == 875060-1.html 875060-1-ref.html
-fails-if(styloVsGecko) == 883987-1a.html 883987-1-ref.html
-fails-if(styloVsGecko) == 883987-1b.html 883987-1-ref.html
-fails-if(styloVsGecko) == 883987-1c.html 883987-1-ref.html
-fails-if(styloVsGecko) == 883987-1d.html 883987-1-ref.html
-fails-if(styloVsGecko) == 883987-1e.html 883987-1-ref.html
+fails-if(styloVsGecko||stylo) == 883987-1a.html 883987-1-ref.html
+fails-if(styloVsGecko||stylo) == 883987-1b.html 883987-1-ref.html
+fails-if(styloVsGecko||stylo) == 883987-1c.html 883987-1-ref.html
+fails-if(styloVsGecko||stylo) == 883987-1d.html 883987-1-ref.html
+fails-if(styloVsGecko||stylo) == 883987-1e.html 883987-1-ref.html
 == 883987-1f.html 883987-1-ref.html
 == 890495-1.html 890495-1-ref.html
 == 894931-1.html 894931-1-ref.html
 == 897491-1.html 897491-1-ref.html
 == 897491-2.html 897491-2-ref.html
 fuzzy(2,10000) fuzzy-if(Android,5,10000) == 902330-1.html 902330-1-ref.html
 fuzzy-if(Android,8,400) fails-if(webrender) == 906199-1.html 906199-1-ref.html
 == 921716-1.html 921716-1-ref.html
@@ -1806,17 +1806,17 @@ fuzzy-if(Android,1,1) fuzzy-if(skiaConte
 fuzzy-if(skiaContent,1,5) == 956513-1.svg 956513-1-ref.svg
 == 944291-1.html 944291-1-ref.html
 == 950436-1.html 950436-1-ref.html
 == 957770-1.svg 957770-1-ref.svg
 == 960277-1.html 960277-1-ref.html
 fuzzy-if(skiaContent,1,80) == 961887-1.html 961887-1-ref.html
 == 961887-2.html 961887-2-ref.html
 == 961887-3.html 961887-3-ref.html
-pref(layout.css.overflow-clip-box.enabled,true) fuzzy(50,145) fuzzy-if(asyncPan&&!layersGPUAccelerated,102,3712) fails-if(styloVsGecko) == 966992-1.html 966992-1-ref.html
+pref(layout.css.overflow-clip-box.enabled,true) fuzzy(50,145) fuzzy-if(asyncPan&&!layersGPUAccelerated,102,3712) fails-if(styloVsGecko||stylo) == 966992-1.html 966992-1-ref.html
 skip-if(Android) == 966510-1.html 966510-1-ref.html # scrollable elements other than the root probably won't work well on android until bug 776030 is fixed
 skip-if(Android) == 966510-2.html 966510-2-ref.html # same as above
 fuzzy-if(skiaContent,1,123) == 978911-1.svg 978911-1-ref.svg
 == 983084-1.html 983084-1-ref.html
 skip-if(styloVsGecko) == 983084-2.html 983084-2-ref.html
 skip-if(styloVsGecko) == 983084-3.html 983084-1-ref.html
 == 983691-1.html 983691-ref.html
 HTTP(..) == 983985-1.html 983985-1-ref.html
@@ -1947,17 +1947,17 @@ fuzzy(1,74) fails-if(gtkWidget&&!styloVs
 fuzzy-if(skiaContent,1,1) == 1202512-2.html 1202512-2-ref.html
 != 1207326-1.html about:blank
 == 1209603-1.html 1209603-1-ref.html
 == 1209994-1.html 1209994-1-ref.html
 == 1209994-2.html 1209994-2-ref.html
 == 1209994-3.html 1209994-3-ref.html
 == 1209994-4.html 1209994-4-ref.html
 == 1222226-1.html 1222226-1-ref.html
-pref(layout.css.overflow-clip-box.enabled,true) fails-if(styloVsGecko) == 1226278.html 1226278-ref.html
+pref(layout.css.overflow-clip-box.enabled,true) fails-if(styloVsGecko||stylo) == 1226278.html 1226278-ref.html
 == 1230466.html about:blank
 random-if(gtkWidget) != 1238243-1.html 1238243-1-notref.html # may fail on Linux, depending on Korean fonts available
 == 1238243-2.html 1238243-2-ref.html
 fuzzy(100,2000) == 1239564.html 1239564-ref.html
 == 1242172-1.html 1242172-1-ref.html
 == 1242172-2.html 1242172-2-ref.html
 == 1242781.html 1242781-ref.html
 == 1263845.html 1263845-ref.html
--- a/layout/reftests/counter-style/reftest.list
+++ b/layout/reftests/counter-style/reftest.list
@@ -26,10 +26,10 @@ fails-if(webrender) == descriptor-range-
 fails-if(webrender) == descriptor-pad-invalid.html      descriptor-pad-invalid-ref.html
 fails-if(webrender) == descriptor-fallback.html         descriptor-fallback-ref.html
 fails-if(webrender) == descriptor-symbols-invalid.html  descriptor-symbols-invalid-ref.html
 == name-case-sensitivity.html       name-case-sensitivity-ref.html
 fails-if(webrender) == dependent-builtin.html           dependent-builtin-ref.html
 == redefine-builtin.html            redefine-builtin-ref.html
 == redefine-attr-mapping.html       redefine-attr-mapping-ref.html
 == disclosure-styles.html           disclosure-styles-ref.html
-fails-if(styloVsGecko) == symbols-function.html            symbols-function-ref.html
+== symbols-function.html            symbols-function-ref.html
 == symbols-function-invalid.html    symbols-function-invalid-ref.html
--- a/layout/reftests/css-display/reftest.list
+++ b/layout/reftests/css-display/reftest.list
@@ -1,32 +1,32 @@
 # Tests for CSS Display spec features.
 # http://dev.w3.org/csswg/css-display
 
 fuzzy-if(Android,8,604) == display-contents-acid.html display-contents-acid-ref.html
 fuzzy-if(Android,8,604) == display-contents-acid-dyn-1.html display-contents-acid-ref.html
 fuzzy-if(Android,8,604) == display-contents-acid-dyn-2.html display-contents-acid-ref.html
 fuzzy-if(Android,8,604) == display-contents-acid-dyn-3.html display-contents-acid-ref.html
-skip-if(styloVsGecko) == display-contents-generated-content.html display-contents-generated-content-ref.html
-skip-if(styloVsGecko) == display-contents-generated-content-2.html display-contents-generated-content-ref.html
-fails-if(styloVsGecko) == display-contents-style-inheritance-1.html display-contents-style-inheritance-1-ref.html
-fails-if(styloVsGecko) == display-contents-style-inheritance-1-stylechange.html display-contents-style-inheritance-1-ref.html
-fuzzy-if(winWidget,12,100) skip-if(styloVsGecko) == display-contents-style-inheritance-1-dom-mutations.html display-contents-style-inheritance-1-ref.html
+skip-if(styloVsGecko||stylo) == display-contents-generated-content.html display-contents-generated-content-ref.html
+skip-if(styloVsGecko||stylo) == display-contents-generated-content-2.html display-contents-generated-content-ref.html
+fails-if(styloVsGecko||stylo) == display-contents-style-inheritance-1.html display-contents-style-inheritance-1-ref.html
+fails-if(styloVsGecko||stylo) == display-contents-style-inheritance-1-stylechange.html display-contents-style-inheritance-1-ref.html
+fuzzy-if(winWidget,12,100) skip-if(styloVsGecko||stylo) == display-contents-style-inheritance-1-dom-mutations.html display-contents-style-inheritance-1-ref.html
 == display-contents-tables.xhtml display-contents-tables-ref.xhtml
 == display-contents-tables-2.xhtml display-contents-tables-ref.xhtml
 == display-contents-tables-3.xhtml display-contents-tables-3-ref.xhtml
 == display-contents-visibility-hidden.html display-contents-visibility-hidden-ref.html
 == display-contents-visibility-hidden-2.html display-contents-visibility-hidden-ref.html
 == display-contents-495385-2d.html display-contents-495385-2d-ref.html
 fuzzy-if(Android,7,3935) == display-contents-xbl.xhtml display-contents-xbl-ref.html
-fuzzy-if(Android,7,1186) pref(dom.webcomponents.enabled,true) skip-if(styloVsGecko) == display-contents-shadow-dom-1.html display-contents-shadow-dom-1-ref.html
+fuzzy-if(Android,7,1186) pref(dom.webcomponents.enabled,true) skip-if(styloVsGecko||stylo) == display-contents-shadow-dom-1.html display-contents-shadow-dom-1-ref.html
 == display-contents-xbl-2.xul display-contents-xbl-2-ref.xul
 asserts(1) asserts-if(styloVsGecko,2) == display-contents-xbl-3.xul display-contents-xbl-3-ref.xul # bug 1089223
 skip == display-contents-xbl-4.xul display-contents-xbl-4-ref.xul # fails (not just asserts) due to bug 1089223
 asserts(0-1) fuzzy-if(Android,8,3216) == display-contents-fieldset.html display-contents-fieldset-ref.html # bug 1089223
 asserts(1) asserts-if(styloVsGecko,2) == display-contents-xbl-5.xul display-contents-xbl-3-ref.xul # bug 1089223
 == display-contents-list-item-child.html display-contents-list-item-child-ref.html
 == display-contents-dyn-insert-text.html display-contents-dyn-insert-text-ref.html
 == display-contents-writing-mode-1.html display-contents-writing-mode-1-ref.html
 == display-contents-writing-mode-2.html display-contents-writing-mode-2-ref.html
 needs-focus == display-contents-state-change.html display-contents-state-change-ref.html
 pref(layout.css.display-flow-root.enabled,true) == display-flow-root-001.html display-flow-root-001-ref.html
-pref(layout.css.display-flow-root.enabled,false) fails-if(styloVsGecko) == display-flow-root-001.html display-flow-root-disabled-001-ref.html
+pref(layout.css.display-flow-root.enabled,false) fails-if(styloVsGecko||stylo) == display-flow-root-001.html display-flow-root-disabled-001-ref.html
--- a/layout/reftests/css-grid/reftest.list
+++ b/layout/reftests/css-grid/reftest.list
@@ -14,29 +14,29 @@ fails-if(!styloVsGecko) skip-if(styloVsG
 == grid-placement-implicit-named-areas-001.html grid-placement-implicit-named-areas-001-ref.html
 == grid-placement-named-lines-001.html grid-placement-named-lines-001-ref.html
 == grid-placement-named-lines-002.html grid-placement-named-lines-002-ref.html
 == grid-placement-named-lines-003.html grid-placement-named-lines-003-ref.html
 == grid-track-sizing-001.html grid-track-sizing-001-ref.html
 == grid-track-sizing-002.html grid-track-sizing-002-ref.html
 == grid-abspos-items-001.html grid-abspos-items-001-ref.html
 == grid-abspos-items-002.html grid-abspos-items-002-ref.html
-fails-if(styloVsGecko) == grid-abspos-items-003.html grid-abspos-items-003-ref.html
-fails-if(styloVsGecko) == grid-abspos-items-004.html grid-abspos-items-004-ref.html
-fails-if(styloVsGecko) == grid-abspos-items-005.html grid-abspos-items-005-ref.html
-fails-if(styloVsGecko) == grid-abspos-items-006.html grid-abspos-items-006-ref.html
-fails-if(styloVsGecko) == grid-abspos-items-007.html grid-abspos-items-007-ref.html
-fails-if(styloVsGecko) == grid-abspos-items-008.html grid-abspos-items-008-ref.html
-fails-if(styloVsGecko) == grid-abspos-items-009.html grid-abspos-items-009-ref.html
-fails-if(styloVsGecko) == grid-abspos-items-010.html grid-abspos-items-010-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-items-003.html grid-abspos-items-003-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-items-004.html grid-abspos-items-004-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-items-005.html grid-abspos-items-005-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-items-006.html grid-abspos-items-006-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-items-007.html grid-abspos-items-007-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-items-008.html grid-abspos-items-008-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-items-009.html grid-abspos-items-009-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-items-010.html grid-abspos-items-010-ref.html
 == grid-abspos-items-011.html grid-abspos-items-011-ref.html
 == grid-abspos-items-012.html grid-abspos-items-012-ref.html
 == grid-abspos-items-013.html grid-abspos-items-013-ref.html
-fails-if(styloVsGecko) == grid-abspos-items-014.html grid-abspos-items-014-ref.html
-fails-if(styloVsGecko) == grid-abspos-items-015.html grid-abspos-items-015-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-items-014.html grid-abspos-items-014-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-items-015.html grid-abspos-items-015-ref.html
 == grid-order-abspos-items-001.html grid-order-abspos-items-001-ref.html
 == grid-order-placement-auto-001.html grid-order-placement-auto-001-ref.html
 fuzzy-if(skiaContent,1,200) == grid-order-placement-definite-001.html grid-order-placement-definite-001-ref.html
 skip-if(Android) == grid-placement-definite-implicit-001.html grid-placement-definite-implicit-001-ref.html
 == grid-placement-definite-implicit-002.html grid-placement-definite-implicit-002-ref.html
 skip-if(Android) fuzzy-if(winWidget,1,32) == grid-placement-auto-implicit-001.html grid-placement-auto-implicit-001-ref.html
 == grid-placement-abspos-implicit-001.html grid-placement-abspos-implicit-001-ref.html
 == rtl-grid-placement-definite-001.html rtl-grid-placement-definite-001-ref.html
@@ -49,147 +49,147 @@ skip-if(Android) fuzzy-if(winWidget,1,32
 == grid-item-sizing-percent-003.html grid-item-sizing-percent-003-ref.html
 == grid-item-sizing-percent-004.html grid-item-sizing-percent-004-ref.html
 == grid-item-sizing-px-001.html grid-item-sizing-percent-001-ref.html
 == grid-item-dir-001.html grid-item-dir-001-ref.html
 fuzzy-if(winWidget,70,130) fuzzy-if(cocoaWidget,85,180) == grid-col-max-sizing-max-content-001.html grid-col-max-sizing-max-content-001-ref.html
 fuzzy-if(winWidget,70,130) fuzzy-if(cocoaWidget,85,180) == grid-col-max-sizing-max-content-002.html grid-col-max-sizing-max-content-002-ref.html
 == grid-min-max-content-sizing-001.html grid-min-max-content-sizing-001-ref.html
 == grid-min-max-content-sizing-002.html grid-min-max-content-sizing-002-ref.html
-fuzzy-if(winWidget,1,36) == grid-auto-min-sizing-definite-001.html grid-auto-min-sizing-definite-001-ref.html
+fuzzy-if(winWidget,1,36) fails-if(stylo) == grid-auto-min-sizing-definite-001.html grid-auto-min-sizing-definite-001-ref.html
 == grid-auto-min-sizing-intrinsic-001.html grid-auto-min-sizing-intrinsic-001-ref.html
 == grid-auto-min-sizing-intrinsic-002.html grid-auto-min-sizing-intrinsic-002-ref.html
 == grid-auto-min-sizing-intrinsic-003.html grid-auto-min-sizing-intrinsic-003-ref.html
 == grid-auto-min-sizing-intrinsic-004.html grid-auto-min-sizing-intrinsic-004-ref.html
 == grid-auto-min-sizing-transferred-size-001.html grid-auto-min-sizing-transferred-size-001-ref.html
 == grid-auto-min-sizing-transferred-size-002.html grid-auto-min-sizing-transferred-size-002-ref.html
-== grid-auto-min-sizing-transferred-size-003.html grid-auto-min-sizing-transferred-size-003-ref.html
-== grid-auto-min-sizing-transferred-size-004.html grid-auto-min-sizing-transferred-size-004-ref.html
+fails-if(stylo) == grid-auto-min-sizing-transferred-size-003.html grid-auto-min-sizing-transferred-size-003-ref.html
+fails-if(stylo) == grid-auto-min-sizing-transferred-size-004.html grid-auto-min-sizing-transferred-size-004-ref.html
 == grid-auto-min-sizing-min-content-min-size-001.html grid-auto-min-sizing-min-content-min-size-001-ref.html
 == grid-auto-min-sizing-min-content-min-size-002.html grid-auto-min-sizing-min-content-min-size-002-ref.html
-== grid-auto-min-sizing-min-content-min-size-003.html grid-auto-min-sizing-min-content-min-size-003-ref.html
-== grid-auto-min-sizing-min-content-min-size-004.html grid-auto-min-sizing-min-content-min-size-004-ref.html
+fails-if(stylo) == grid-auto-min-sizing-min-content-min-size-003.html grid-auto-min-sizing-min-content-min-size-003-ref.html
+fails-if(stylo) == grid-auto-min-sizing-min-content-min-size-004.html grid-auto-min-sizing-min-content-min-size-004-ref.html
 == grid-min-content-min-sizing-transferred-size-001.html grid-min-content-min-sizing-transferred-size-001-ref.html
 == grid-min-content-min-sizing-transferred-size-002.html grid-min-content-min-sizing-transferred-size-002-ref.html
 == grid-min-content-min-sizing-transferred-size-003.html grid-min-content-min-sizing-transferred-size-003-ref.html
-== grid-min-content-min-sizing-transferred-size-004.html grid-min-content-min-sizing-transferred-size-004-ref.html
+fails-if(stylo) == grid-min-content-min-sizing-transferred-size-004.html grid-min-content-min-sizing-transferred-size-004-ref.html
 skip-if(Android) == grid-auto-min-sizing-percent-001.html grid-auto-min-sizing-percent-001-ref.html # bug 1305716
 == grid-track-intrinsic-sizing-001.html grid-track-intrinsic-sizing-001-ref.html
 == grid-track-intrinsic-sizing-002.html grid-track-intrinsic-sizing-002-ref.html
 == grid-track-intrinsic-sizing-003.html grid-track-intrinsic-sizing-003-ref.html
 == grid-track-intrinsic-sizing-004.html grid-track-intrinsic-sizing-004-ref.html
-== grid-track-percent-sizing-001.html grid-track-percent-sizing-001-ref.html
-fails-if(styloVsGecko) == grid-track-fit-content-sizing-001.html grid-track-fit-content-sizing-001-ref.html
+fails-if(stylo) == grid-track-percent-sizing-001.html grid-track-percent-sizing-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-track-fit-content-sizing-001.html grid-track-fit-content-sizing-001-ref.html
 == grid-track-fit-content-sizing-002.html grid-track-fit-content-sizing-002-ref.html
 == grid-max-sizing-flex-001.html grid-max-sizing-flex-001-ref.html
 == grid-max-sizing-flex-002.html grid-max-sizing-flex-002-ref.html
 == grid-max-sizing-flex-003.html grid-max-sizing-flex-003-ref.html
 == grid-max-sizing-flex-004.html grid-max-sizing-flex-004-ref.html
 == grid-max-sizing-flex-005.html grid-max-sizing-flex-005-ref.html
 == grid-max-sizing-flex-006.html grid-max-sizing-flex-006-ref.html
-fails-if(styloVsGecko) == grid-max-sizing-flex-007.html grid-max-sizing-flex-007-ref.html
-fails-if(styloVsGecko) == grid-max-sizing-flex-008.html grid-max-sizing-flex-008-ref.html
+fails-if(styloVsGecko||stylo) == grid-max-sizing-flex-007.html grid-max-sizing-flex-007-ref.html
+fails-if(styloVsGecko||stylo) == grid-max-sizing-flex-008.html grid-max-sizing-flex-008-ref.html
 == grid-flex-min-sizing-001.html grid-flex-min-sizing-001-ref.html
 == grid-flex-min-sizing-002.html grid-flex-min-sizing-002-ref.html
-fails-if(styloVsGecko) == grid-item-align-001.html grid-item-align-001-ref.html
-fails-if(styloVsGecko) == grid-item-align-002.html grid-item-align-002-ref.html
-fails-if(styloVsGecko) == grid-item-align-003.html grid-item-align-003-ref.html
-fails-if(styloVsGecko) == grid-item-justify-001.html grid-item-justify-001-ref.html
-fails-if(styloVsGecko) == grid-item-justify-002.html grid-item-justify-002-ref.html
-fails-if(styloVsGecko) == grid-item-stretch-001.html grid-item-stretch-001-ref.html
-fails-if(styloVsGecko) == grid-item-intrinsic-ratio-stretch-001.html grid-item-intrinsic-ratio-stretch-001-ref.html
-fails-if(styloVsGecko) == grid-item-intrinsic-ratio-stretch-002.html grid-item-intrinsic-ratio-stretch-002-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-align-001.html grid-item-align-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-align-002.html grid-item-align-002-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-align-003.html grid-item-align-003-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-justify-001.html grid-item-justify-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-justify-002.html grid-item-justify-002-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-stretch-001.html grid-item-stretch-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-intrinsic-ratio-stretch-001.html grid-item-intrinsic-ratio-stretch-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-intrinsic-ratio-stretch-002.html grid-item-intrinsic-ratio-stretch-002-ref.html
 fails-if(styloVsGecko) == grid-item-intrinsic-ratio-stretch-003.html grid-item-intrinsic-ratio-stretch-003-ref.html
-fails-if(styloVsGecko) == grid-item-intrinsic-ratio-stretch-004.html grid-item-intrinsic-ratio-stretch-004-ref.html
-fails-if(styloVsGecko) == grid-item-intrinsic-ratio-stretch-005.html grid-item-intrinsic-ratio-stretch-005-ref.html
-fails-if(styloVsGecko) == grid-item-intrinsic-ratio-stretch-006.html grid-item-intrinsic-ratio-stretch-006-ref.html
-fails-if(styloVsGecko) == grid-item-intrinsic-ratio-stretch-007.html grid-item-intrinsic-ratio-stretch-007-ref.html
-fails-if(styloVsGecko) == grid-item-intrinsic-ratio-normal-001.html grid-item-intrinsic-ratio-normal-001-ref.html
-fails-if(styloVsGecko) == grid-item-intrinsic-ratio-normal-002.html grid-item-intrinsic-ratio-normal-002-ref.html
-fails-if(styloVsGecko) == grid-item-intrinsic-ratio-normal-003.html grid-item-intrinsic-ratio-normal-003-ref.html
-fails-if(styloVsGecko) == grid-item-intrinsic-ratio-normal-004.html grid-item-intrinsic-ratio-normal-004-ref.html
-fails-if(styloVsGecko) == grid-item-intrinsic-ratio-normal-005.html grid-item-intrinsic-ratio-normal-005-ref.html
-fails-if(styloVsGecko) == grid-item-intrinsic-size-normal-001.html grid-item-intrinsic-size-normal-001-ref.html
-fails-if(styloVsGecko) == grid-item-intrinsic-size-normal-002.html grid-item-intrinsic-size-normal-002-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-intrinsic-ratio-stretch-004.html grid-item-intrinsic-ratio-stretch-004-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-intrinsic-ratio-stretch-005.html grid-item-intrinsic-ratio-stretch-005-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-intrinsic-ratio-stretch-006.html grid-item-intrinsic-ratio-stretch-006-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-intrinsic-ratio-stretch-007.html grid-item-intrinsic-ratio-stretch-007-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-intrinsic-ratio-normal-001.html grid-item-intrinsic-ratio-normal-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-intrinsic-ratio-normal-002.html grid-item-intrinsic-ratio-normal-002-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-intrinsic-ratio-normal-003.html grid-item-intrinsic-ratio-normal-003-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-intrinsic-ratio-normal-004.html grid-item-intrinsic-ratio-normal-004-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-intrinsic-ratio-normal-005.html grid-item-intrinsic-ratio-normal-005-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-intrinsic-size-normal-001.html grid-item-intrinsic-size-normal-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-intrinsic-size-normal-002.html grid-item-intrinsic-size-normal-002-ref.html
 == grid-item-auto-min-size-clamp-001.html grid-item-auto-min-size-clamp-001-ref.html
 == grid-item-auto-min-size-clamp-002.html grid-item-auto-min-size-clamp-002-ref.html
 == grid-item-auto-min-size-clamp-003.html grid-item-auto-min-size-clamp-003-ref.html
 == grid-item-auto-min-size-clamp-004.html grid-item-auto-min-size-clamp-004-ref.html
 == grid-item-auto-min-size-clamp-005.html grid-item-auto-min-size-clamp-005-ref.html
 == grid-item-auto-min-size-clamp-006.html grid-item-auto-min-size-clamp-006-ref.html
 == grid-item-auto-min-size-clamp-007.html grid-item-auto-min-size-clamp-007-ref.html
-fails-if(styloVsGecko) == grid-item-overflow-stretch-001.html grid-item-overflow-stretch-001-ref.html
-fails-if(styloVsGecko) == grid-item-overflow-stretch-002.html grid-item-overflow-stretch-002-ref.html
-fails-if(styloVsGecko) == grid-item-overflow-stretch-003.html grid-item-overflow-stretch-003-ref.html
-fails-if(styloVsGecko) == grid-item-overflow-stretch-004.html grid-item-overflow-stretch-004-ref.html
-fails-if(styloVsGecko) == grid-item-overflow-stretch-005.html grid-item-overflow-stretch-005-ref.html
-fails-if(styloVsGecko) == grid-item-overflow-stretch-006.html grid-item-overflow-stretch-006-ref.html
-fails-if(styloVsGecko) == grid-item-canvas-001.html grid-item-canvas-001-ref.html
-skip-if(Android) fails-if(styloVsGecko) == grid-item-button-001.html grid-item-button-001-ref.html
-fails-if(styloVsGecko) == grid-item-table-stretch-001.html grid-item-table-stretch-001-ref.html
-fails-if(styloVsGecko) == grid-item-table-stretch-002.html grid-item-table-stretch-002-ref.html
-fails-if(styloVsGecko) == grid-item-table-stretch-003.html grid-item-table-stretch-003-ref.html
-fails-if(styloVsGecko) == grid-item-table-stretch-004.html grid-item-table-stretch-004-ref.html
-fails-if(styloVsGecko) == grid-item-fieldset-stretch-001.html grid-item-fieldset-stretch-001-ref.html
-skip-if(Android) fails-if(styloVsGecko) == grid-item-video-stretch-001.html grid-item-video-stretch-001-ref.html # Huh, Android doesn't have webm support?
-skip-if(Android) fails-if(styloVsGecko) == grid-item-video-stretch-002.html grid-item-video-stretch-002-ref.html # Huh, Android doesn't have webm support?
-fails-if(styloVsGecko) == grid-item-input-stretch-001.html grid-item-input-stretch-001-ref.html
-fails-if(styloVsGecko) == grid-item-self-baseline-001.html grid-item-self-baseline-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-overflow-stretch-001.html grid-item-overflow-stretch-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-overflow-stretch-002.html grid-item-overflow-stretch-002-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-overflow-stretch-003.html grid-item-overflow-stretch-003-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-overflow-stretch-004.html grid-item-overflow-stretch-004-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-overflow-stretch-005.html grid-item-overflow-stretch-005-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-overflow-stretch-006.html grid-item-overflow-stretch-006-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-canvas-001.html grid-item-canvas-001-ref.html
+skip-if(Android) fails-if(styloVsGecko||stylo) == grid-item-button-001.html grid-item-button-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-table-stretch-001.html grid-item-table-stretch-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-table-stretch-002.html grid-item-table-stretch-002-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-table-stretch-003.html grid-item-table-stretch-003-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-table-stretch-004.html grid-item-table-stretch-004-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-fieldset-stretch-001.html grid-item-fieldset-stretch-001-ref.html
+skip-if(Android) fails-if(styloVsGecko||stylo) == grid-item-video-stretch-001.html grid-item-video-stretch-001-ref.html # Huh, Android doesn't have webm support?
+skip-if(Android) fails-if(styloVsGecko||stylo) == grid-item-video-stretch-002.html grid-item-video-stretch-002-ref.html # Huh, Android doesn't have webm support?
+fails-if(styloVsGecko||stylo) == grid-item-input-stretch-001.html grid-item-input-stretch-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-self-baseline-001.html grid-item-self-baseline-001-ref.html
 random-if(http.oscpu!="Linux\u0020i686") fails-if(styloVsGecko) == grid-item-content-baseline-001.html grid-item-content-baseline-001-ref.html # depends on exact Ahem baseline font metrics which seems to differ between platforms: bug 1310792
 random-if(http.oscpu!="Linux\u0020i686") fails-if(styloVsGecko) == grid-item-content-baseline-002.html grid-item-content-baseline-002-ref.html # ditto
 random-if(http.oscpu!="Linux\u0020i686") fails-if(styloVsGecko) == grid-item-mixed-baseline-001.html grid-item-mixed-baseline-001-ref.html # ditto
 random-if(http.oscpu!="Linux\u0020i686") fails-if(styloVsGecko) == grid-item-mixed-baseline-002.html grid-item-mixed-baseline-002-ref.html # ditto
 random-if(http.oscpu!="Linux\u0020i686") fails-if(styloVsGecko) == grid-item-mixed-baseline-003.html grid-item-mixed-baseline-003-ref.html # ditto
-skip-if(!gtkWidget) fails-if(styloVsGecko) == grid-item-mixed-baseline-004.html grid-item-mixed-baseline-004-ref.html # ditto
-fails-if(styloVsGecko) == grid-align-content-001.html grid-align-content-001-ref.html
-fails-if(styloVsGecko) == grid-justify-content-001.html grid-justify-content-001-ref.html
+skip-if(!gtkWidget) fails-if(styloVsGecko||stylo) == grid-item-mixed-baseline-004.html grid-item-mixed-baseline-004-ref.html # ditto
+fails-if(styloVsGecko||stylo) == grid-align-content-001.html grid-align-content-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-justify-content-001.html grid-justify-content-001-ref.html
 skip-if(Android&&isDebugBuild) == grid-justify-content-002.html grid-justify-content-002-ref.html # Bug 1245884 - slow
 skip-if(Android&&isDebugBuild) == grid-justify-content-003.html grid-justify-content-003-ref.html # Bug 1245884 - slow
-skip-if(!gtkWidget) fails-if(styloVsGecko) == grid-container-baselines-001.html grid-container-baselines-001-ref.html
-skip-if(!gtkWidget) fails-if(styloVsGecko) == grid-container-baselines-002.html grid-container-baselines-002-ref.html
-skip-if(!gtkWidget) fails-if(styloVsGecko) == grid-container-baselines-003.html grid-container-baselines-003-ref.html
+skip-if(!gtkWidget) fails-if(styloVsGecko||stylo) == grid-container-baselines-001.html grid-container-baselines-001-ref.html
+skip-if(!gtkWidget) fails-if(styloVsGecko||stylo) == grid-container-baselines-002.html grid-container-baselines-002-ref.html
+skip-if(!gtkWidget) fails-if(styloVsGecko||stylo) == grid-container-baselines-003.html grid-container-baselines-003-ref.html
 == grid-container-baselines-004.html grid-container-baselines-004-ref.html
 == grid-container-synthesized-baseline-001-ref.html grid-container-synthesized-baseline-001-ref.html
 skip-if(Android&&isDebugBuild) == grid-column-gap-001.html grid-column-gap-001-ref.html # Bug 1245884 - slow
 == grid-column-gap-002.html grid-column-gap-002-ref.html
 == grid-column-gap-003.html grid-column-gap-003-ref.html
 fails-if(styloVsGecko) == grid-column-gap-004.html grid-column-gap-004-ref.html
-fails-if(styloVsGecko) == grid-row-gap-001.html grid-row-gap-001-ref.html
-fails-if(styloVsGecko) == grid-percent-grid-gap-001.html grid-percent-grid-gap-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-row-gap-001.html grid-row-gap-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-percent-grid-gap-001.html grid-percent-grid-gap-001-ref.html
 skip-if(Android&&isDebugBuild) == grid-row-gap-002.html grid-row-gap-002-ref.html # Bug 1245884 - slow
 skip-if(Android&&isDebugBuild) == grid-row-gap-003.html grid-row-gap-003-ref.html # Bug 1245884 - slow
 skip-if(Android&&isDebugBuild) == grid-row-gap-004.html grid-row-gap-004-ref.html # Bug 1245884 - slow
 fails-if(styloVsGecko) == grid-row-gap-005.html grid-row-gap-005-ref.html
 == grid-container-overflow-001.html grid-container-overflow-001-ref.html
-fails-if(styloVsGecko) == grid-item-margin-left-auto-001.html grid-item-margin-left-auto-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-margin-left-auto-001.html grid-item-margin-left-auto-001-ref.html
 fails-if(styloVsGecko) == grid-item-margin-left-auto-002.html grid-item-margin-left-auto-002-ref.html
 fails-if(styloVsGecko) == grid-item-margin-left-auto-003.html grid-item-margin-left-auto-003-ref.html
 fails-if(styloVsGecko) == grid-item-margin-left-auto-004.html grid-item-margin-left-auto-004-ref.html
 fails-if(styloVsGecko) == grid-item-margin-left-right-auto-001.html grid-item-margin-left-right-auto-001-ref.html
 fails-if(styloVsGecko) == grid-item-margin-left-right-auto-002.html grid-item-margin-left-right-auto-002-ref.html
 fails-if(styloVsGecko) == grid-item-margin-left-right-auto-003.html grid-item-margin-left-right-auto-003-ref.html
 fails-if(styloVsGecko) == grid-item-margin-left-right-auto-004.html grid-item-margin-left-right-auto-004-ref.html
-fails-if(styloVsGecko) == grid-item-margin-right-auto-001.html grid-item-margin-right-auto-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-item-margin-right-auto-001.html grid-item-margin-right-auto-001-ref.html
 fails-if(styloVsGecko) == grid-item-margin-right-auto-002.html grid-item-margin-right-auto-002-ref.html
 fails-if(styloVsGecko) == grid-item-margin-right-auto-003.html grid-item-margin-right-auto-003-ref.html
 fails-if(styloVsGecko) == grid-item-margin-right-auto-004.html grid-item-margin-right-auto-004-ref.html
-fails-if(styloVsGecko) == grid-container-min-max-width-height-001.html grid-container-min-max-width-height-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-container-min-max-width-height-001.html grid-container-min-max-width-height-001-ref.html
 == grid-clamping-001.html grid-clamping-001-ref.html
 == grid-clamping-002.html grid-clamping-002-ref.html
 == grid-repeat-auto-fill-fit-001.html grid-repeat-auto-fill-fit-001-ref.html
 == grid-repeat-auto-fill-fit-002.html grid-repeat-auto-fill-fit-002-ref.html
 == grid-repeat-auto-fill-fit-003.html grid-repeat-auto-fill-fit-003-ref.html
 == grid-repeat-auto-fill-fit-004.html grid-repeat-auto-fill-fit-004-ref.html
 == grid-repeat-auto-fill-fit-005.html grid-repeat-auto-fill-fit-005-ref.html
 == grid-repeat-auto-fill-fit-006.html grid-repeat-auto-fill-fit-006-ref.html
 == grid-repeat-auto-fill-fit-007.html grid-repeat-auto-fill-fit-007-ref.html
 == grid-repeat-auto-fill-fit-008.html grid-repeat-auto-fill-fit-008-ref.html
 == grid-repeat-auto-fill-fit-009.html grid-repeat-auto-fill-fit-009-ref.html
-fails-if(styloVsGecko) == grid-repeat-auto-fill-fit-010.html grid-repeat-auto-fill-fit-010-ref.html
-fails-if(styloVsGecko) == grid-repeat-auto-fill-fit-011.html grid-repeat-auto-fill-fit-010-ref.html
+fails-if(styloVsGecko||stylo) == grid-repeat-auto-fill-fit-010.html grid-repeat-auto-fill-fit-010-ref.html
+fails-if(styloVsGecko||stylo) == grid-repeat-auto-fill-fit-011.html grid-repeat-auto-fill-fit-010-ref.html
 == grid-item-blockifying-001.html grid-item-blockifying-001-ref.html
 == grid-fragmentation-001.html grid-fragmentation-001-ref.html
 == grid-fragmentation-002.html grid-fragmentation-002-ref.html
 == grid-fragmentation-003.html grid-fragmentation-003-ref.html
 == grid-fragmentation-004.html grid-fragmentation-004-ref.html
 == grid-fragmentation-005.html grid-fragmentation-005-ref.html
 == grid-fragmentation-006.html grid-fragmentation-006-ref.html
 == grid-fragmentation-007.html grid-fragmentation-007-ref.html
--- a/layout/reftests/css-import/reftest.list
+++ b/layout/reftests/css-import/reftest.list
@@ -1,10 +1,10 @@
 == 290018-1.html 290018-ref.html
 == 436261-1.html 436261-ref.html
 == 436261-2.html 436261-ref.html
-fails-if(styloVsGecko) == 436261-3.html 436261-ref.html
+fails-if(styloVsGecko||stylo) == 436261-3.html 436261-ref.html
 == 444723-1.html 444723-ref.html
 == 444723-2.html 444723-ref.html
-fails-if(styloVsGecko) == 445415-1a.xhtml 445415-1-ref.xhtml
+fails-if(styloVsGecko||stylo) == 445415-1a.xhtml 445415-1-ref.xhtml
 == 445415-1b.xhtml 445415-1-ref.xhtml
 == 445415-2a.xhtml 445415-2-ref.xhtml
-fails-if(styloVsGecko) == 445415-2b.xhtml 445415-2-ref.xhtml
+fails-if(styloVsGecko||stylo) == 445415-2b.xhtml 445415-2-ref.xhtml
--- a/layout/reftests/css-mediaqueries/reftest.list
+++ b/layout/reftests/css-mediaqueries/reftest.list
@@ -11,9 +11,9 @@ fuzzy-if(Android,8,454) == mq_print_maxh
 == mq_print_maxwidth.xhtml mq_print-ref.xhtml
 
 == mq_print_maxwidth_updown.xhtml mq_print-ref.xhtml
 == mq_print_maxheight_updown.xhtml mq_print-ref.xhtml
 == mq_print_minheight_updown.xhtml mq_print-ref.xhtml
 == mq_print_minwidth_updown.xhtml mq_print-ref.xhtml
 
 == scoped-mq-update.html scoped-mq-update-ref.html
-fails-if(styloVsGecko) == system-metrics-1.html system-metrics-1-ref.html
+fails-if(styloVsGecko||stylo) == system-metrics-1.html system-metrics-1-ref.html
--- a/layout/reftests/css-parsing/reftest.list
+++ b/layout/reftests/css-parsing/reftest.list
@@ -1,9 +1,9 @@
 == at-rule-013.html at-rule-013-ref.html
-fails-if(styloVsGecko) == invalid-url-handling.xhtml invalid-url-handling-ref.xhtml
+fails-if(styloVsGecko||stylo) == invalid-url-handling.xhtml invalid-url-handling-ref.xhtml
 == pseudo-elements-1.html pseudo-elements-1-ref.html
 == invalid-attr-1.html invalid-attr-1-ref.html
 == at-rule-error-handling-import-1.html at-rule-error-handling-ref.html
 == at-rule-error-handling-media-1.html at-rule-error-handling-ref.html
 == invalid-font-face-descriptor-1.html invalid-font-face-descriptor-1-ref.html
 == two-dash-identifiers.html two-dash-identifiers-ref.html
 == supports-moz-bool-pref.html supports-moz-bool-pref-ref.html
--- a/layout/reftests/css-placeholder/reftest.list
+++ b/layout/reftests/css-placeholder/reftest.list
@@ -1,7 +1,7 @@
 include input/reftest.list
 include textarea/reftest.list
 
-fuzzy-if(skiaContent,1,4) fails-if(styloVsGecko) == css-restrictions.html css-restrictions-ref.html
+fuzzy-if(skiaContent,1,4) fails-if(styloVsGecko||stylo) == css-restrictions.html css-restrictions-ref.html
 fails-if(styloVsGecko) == css-simple-styling.html css-simple-styling-ref.html
 fails-if(styloVsGecko) != css-background.html css-background-ref.html
 fuzzy-if(skiaContent,1,180) fails-if(styloVsGecko) == ignore-pseudo-class.html ignore-pseudo-class-ref.html
--- a/layout/reftests/css-ruby/reftest.list
+++ b/layout/reftests/css-ruby/reftest.list
@@ -1,55 +1,55 @@
 == bidi-1.html bidi-1-ref.html
 == bidi-2.html bidi-2-ref.html
 == box-generation-1.html box-generation-1-ref.html
 == box-generation-2.html box-generation-2-ref.html
 == box-generation-3.html box-generation-3-ref.html
 == box-generation-4.html box-generation-4-ref.html
 == box-generation-5.html box-generation-5-ref.html
-fails-if(styloVsGecko) == box-properties-1.html box-properties-1-ref.html
-fails-if(styloVsGecko) == box-properties-2.html box-properties-2-ref.html
-fails-if(styloVsGecko) == box-properties-3.html box-properties-3-ref.html
-fails-if(styloVsGecko) == box-properties-4.html box-properties-4-ref.html
+fails-if(styloVsGecko||stylo) == box-properties-1.html box-properties-1-ref.html
+fails-if(styloVsGecko||stylo) == box-properties-2.html box-properties-2-ref.html
+fails-if(styloVsGecko||stylo) == box-properties-3.html box-properties-3-ref.html
+fails-if(styloVsGecko||stylo) == box-properties-4.html box-properties-4-ref.html
 == dynamic-insertion-1.html dynamic-insertion-1-ref.html
 == dynamic-insertion-2.html dynamic-insertion-2-ref.html
 fails-if(styloVsGecko) == dynamic-insertion-3.html dynamic-insertion-3-ref.html
 == dynamic-removal-1.html dynamic-removal-1-ref.html
 == dynamic-removal-2.html dynamic-removal-2-ref.html
 == dynamic-removal-3.html dynamic-removal-3-ref.html
 == float-handling.html float-handling-ref.html
 test-pref(dom.meta-viewport.enabled,true) test-pref(font.size.inflation.emPerLine,15) test-pref(font.size.inflation.forceEnabled,true) test-pref(font.size.inflation.lineThreshold,0) == inflated-ruby-1.html inflated-ruby-1-ref.html
 == intra-level-whitespace-1.html intra-level-whitespace-1-ref.html
 == intra-level-whitespace-2.html intra-level-whitespace-2-ref.html
 == intra-level-whitespace-3.html intra-level-whitespace-3-ref.html
 == intrinsic-isize-1.html intrinsic-isize-1-ref.html
 == intrinsic-isize-2.html intrinsic-isize-2-ref.html
-fails-if(styloVsGecko) == justification-1.html justification-1-ref.html
+fails-if(styloVsGecko||stylo) == justification-1.html justification-1-ref.html
 fails-if(styloVsGecko) == justification-2.html justification-2-ref.html
 fuzzy-if(winWidget,255,792) == lang-specific-style-1.html lang-specific-style-1-ref.html # bug 1134947
 == line-breaking-1.html line-breaking-1-ref.html
-fails-if(styloVsGecko) == line-breaking-2.html line-breaking-2-ref.html
-fuzzy-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu),3,2) skip-if(styloVsGecko) == line-break-suppression-1.html line-break-suppression-1-ref.html
-fuzzy-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu),3,2) skip-if(styloVsGecko) == line-break-suppression-2.html line-break-suppression-2-ref.html
-skip-if(styloVsGecko) == line-break-suppression-3.html line-break-suppression-3-ref.html
+fails-if(styloVsGecko||stylo) == line-breaking-2.html line-breaking-2-ref.html
+fuzzy-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu),3,2) skip-if(styloVsGecko||stylo) == line-break-suppression-1.html line-break-suppression-1-ref.html
+fuzzy-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu),3,2) skip-if(styloVsGecko||stylo) == line-break-suppression-2.html line-break-suppression-2-ref.html
+skip-if(styloVsGecko||stylo) == line-break-suppression-3.html line-break-suppression-3-ref.html
 == line-break-suppression-4.html line-break-suppression-4-ref.html
 == line-break-suppression-5.html line-break-suppression-5-ref.html
 == line-height-1.html line-height-1-ref.html
 == line-height-2.html line-height-2-ref.html
 == line-height-3.html line-height-3-ref.html
 == line-height-4.html line-height-4-ref.html
-test-pref(font.minimum-size.ja,16) fails-if(styloVsGecko) == min-font-size-1.html min-font-size-1-ref.html
+test-pref(font.minimum-size.ja,16) fails-if(styloVsGecko||stylo) == min-font-size-1.html min-font-size-1-ref.html
 skip-if(styloVsGecko) load nested-ruby-1.html
 == no-transform.html no-transform-ref.html
-fails-if(styloVsGecko) == relative-positioning-1.html relative-positioning-1-ref.html
+fails-if(styloVsGecko||stylo) == relative-positioning-1.html relative-positioning-1-ref.html
 == relative-positioning-2.html relative-positioning-2-ref.html
-fails-if(styloVsGecko) == ruby-align-1.html ruby-align-1-ref.html
-fails-if(styloVsGecko) == ruby-align-1a.html ruby-align-1-ref.html
-fails-if(styloVsGecko) == ruby-align-2.html ruby-align-2-ref.html
-fails-if(styloVsGecko) == ruby-align-2a.html ruby-align-2-ref.html
+fails-if(styloVsGecko||stylo) == ruby-align-1.html ruby-align-1-ref.html
+fails-if(styloVsGecko||stylo) == ruby-align-1a.html ruby-align-1-ref.html
+fails-if(styloVsGecko||stylo) == ruby-align-2.html ruby-align-2-ref.html
+fails-if(styloVsGecko||stylo) == ruby-align-2a.html ruby-align-2-ref.html
 == ruby-position-horizontal.html ruby-position-horizontal-ref.html
 == ruby-position-vertical-lr.html ruby-position-vertical-lr-ref.html
 == ruby-position-vertical-rl.html ruby-position-vertical-rl-ref.html
 != ruby-reflow-1-opaqueruby.html ruby-reflow-1-noruby.html
 fuzzy-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu),13,1) == ruby-reflow-1-transparentruby.html ruby-reflow-1-noruby.html
 == ruby-span-1.html ruby-span-1-ref.html
 == ruby-whitespace-1.html ruby-whitespace-1-ref.html
 == ruby-whitespace-2.html ruby-whitespace-2-ref.html
--- a/layout/reftests/css-selectors/reftest.list
+++ b/layout/reftests/css-selectors/reftest.list
@@ -1,6 +1,6 @@
 == state-dependent-in-any.html state-dependent-in-any-ref.html
 == attr-case-insensitive-1.html attr-case-insensitive-1-ref.html
 == sibling-combinators-on-anon-content-1.xhtml sibling-combinators-on-anon-content-ref.xhtml
 == sibling-combinators-on-anon-content-2.xhtml sibling-combinators-on-anon-content-ref.xhtml
-fails-if(styloVsGecko) == nth-child-1.html nth-child-ref.html
-fails-if(styloVsGecko) == nth-child-2.html nth-child-ref.html
+fails-if(styloVsGecko||stylo) == nth-child-1.html nth-child-ref.html
+fails-if(styloVsGecko||stylo) == nth-child-2.html nth-child-ref.html
--- a/layout/reftests/css-valuesandunits/reftest.list
+++ b/layout/reftests/css-valuesandunits/reftest.list
@@ -1,15 +1,15 @@
-fails-if(stylo) == unit-rem-div-fontsize.html unit-rem-ref.html
-fails-if(stylo) == unit-rem-div-width-inner.html unit-rem-ref.html
-fails-if(stylo) == unit-rem-div-width-outer.html unit-rem-ref.html
-fails-if(stylo) == unit-rem-iframe.html unit-rem-ref-iframe.html
+== unit-rem-div-fontsize.html unit-rem-ref.html
+== unit-rem-div-width-inner.html unit-rem-ref.html
+== unit-rem-div-width-outer.html unit-rem-ref.html
+skip-if(styloVsGecko||stylo) == unit-rem-iframe.html unit-rem-ref-iframe.html
 == unit-rem-root-fontsize.html unit-rem-ref-root-fontsize.html
 == unit-rem-root-fontsize.html unit-rem-ref2-root-fontsize.html
 == unit-rem-root-width.html unit-rem-ref-root-width.html
-fails-if(stylo) == unit-rem.svg unit-rem-ref.svg
+== unit-rem.svg unit-rem-ref.svg
 == unit-vh-vw.html unit-vh-vw-ref.html
 == unit-vh-vw-zoom.html unit-vh-vw-zoom-ref.html
 == unit-vh-vw-overflow-auto.html unit-vh-vw-overflow-auto-ref.html
-fails-if(styloVsGecko) == unit-vh-vw-overflow-scroll.html unit-vh-vw-overflow-scroll-ref.html
-fails-if(styloVsGecko) == unit-vh-vw-overflow-scroll-x.html unit-vh-vw-overflow-scroll-x-ref.html
-fails-if(styloVsGecko) == unit-vh-vw-overflow-scroll-y.html unit-vh-vw-overflow-scroll-y-ref.html
-skip-if(Android) != unit-vh-vw-overflow-auto.html unit-vh-vw-overflow-scroll.html
+fails-if(styloVsGecko||stylo) == unit-vh-vw-overflow-scroll.html unit-vh-vw-overflow-scroll-ref.html
+fails-if(styloVsGecko||stylo) == unit-vh-vw-overflow-scroll-x.html unit-vh-vw-overflow-scroll-x-ref.html
+fails-if(styloVsGecko||stylo) == unit-vh-vw-overflow-scroll-y.html unit-vh-vw-overflow-scroll-y-ref.html
+skip-if(Android) fails-if(stylo) != unit-vh-vw-overflow-auto.html unit-vh-vw-overflow-scroll.html
--- a/layout/reftests/dom/reftest.list
+++ b/layout/reftests/dom/reftest.list
@@ -44,12 +44,12 @@
 == multipleinsertionpoints-insertmultiple.xhtml multipleinsertionpoints-ref.xhtml
 
 # test appending some nodes whose frame construction should be done lazily
 # followed by appending a node that might not be done lazily
 == multipleappendwithxul.xhtml multipleappendwithxul-ref.xhtml
 == multipleappendwithinput.xhtml multipleappendwithinput-ref.xhtml
 == multipleappendwitheditable.xhtml multipleappendwitheditable-ref.xhtml
 
-fails-if(styloVsGecko) == xbl-children-1.xhtml xbl-children-1-ref.xhtml
+fails-if(styloVsGecko||stylo) == xbl-children-1.xhtml xbl-children-1-ref.xhtml
 == xbl-children-2.xhtml about:blank
 == xbl-children-3.xhtml xbl-children-3-ref.html
 == xbl-children-4.xhtml about:blank
--- a/layout/reftests/first-letter/reftest.list
+++ b/layout/reftests/first-letter/reftest.list
@@ -17,46 +17,46 @@
 fails-if(!styloVsGecko) == quote-1b.html quote-1-ref.html # bug 509685
 fails-if(!styloVsGecko) == quote-1c.html quote-1-ref.html # bug 509685
 == quote-1c.html quote-1b.html
 fails-if(!styloVsGecko) == quote-1d.html quote-1-ref.html
 == quote-1d.html quote-1b.html
 fails-if(!styloVsGecko) == quote-1e.html quote-1-ref.html # bug 509685
 == quote-1e.html quote-1b.html
 == quote-1f.html quote-1-ref.html
-fails-if(!styloVsGecko) fails-if(styloVsGecko) == dynamic-1.html dynamic-1-ref.html # bug 8253
+fails-if(!stylo) fails-if(styloVsGecko) == dynamic-1.html dynamic-1-ref.html # bug 8253
 random-if(d2d) == dynamic-2.html dynamic-2-ref.html
-fails-if(styloVsGecko) asserts-if(styloVsGecko,6) == dynamic-3a.html dynamic-3-ref.html
-fails-if(styloVsGecko) asserts-if(styloVsGecko,6) == dynamic-3b.html dynamic-3-ref.html
+fails-if(styloVsGecko) asserts-if(styloVsGecko,6) asserts-if(stylo,6) fails-if(stylo) == dynamic-3a.html dynamic-3-ref.html
+fails-if(styloVsGecko) asserts-if(styloVsGecko,6) asserts-if(stylo,6) fails-if(stylo) == dynamic-3b.html dynamic-3-ref.html
 == 23605-1.html 23605-1-ref.html
 == 23605-2.html 23605-2-ref.html
 == 23605-3.html 23605-3-ref.html
 == 23605-4.html 23605-4-ref.html
 == 23605-5.html 23605-5-ref.html
 == 23605-6.html 23605-6-ref.html
 != 229764-1.html 229764-ref.html
-fails-if(styloVsGecko) == 229764-2.html 229764-ref.html
+fails-if(styloVsGecko||stylo) == 229764-2.html 229764-ref.html
 == 329069-1.html 329069-1-ref.html
 fails-if(Android) == 329069-2.html 329069-2-ref.html # Bug 999139
 == 329069-3.html 329069-3-ref.html
 == 329069-4.html 329069-4-ref.html
 HTTP(..) == 329069-5.html 329069-5-ref.html
 == 342120-1.xhtml 342120-1-ref.xhtml
-fails-if(styloVsGecko) asserts-if(styloVsGecko,6) == 379799-1.html 379799-1-ref.html
+fails-if(styloVsGecko) asserts-if(styloVsGecko,6) asserts-if(stylo,6) fails-if(stylo) == 379799-1.html 379799-1-ref.html
 == 399941-1.html 399941-1-ref.html
 == 399941-2.html 399941-2-ref.html
 == 399941-3.html 399941-3-ref.html
 == 399941-4.html 399941-4-ref.html
 == 399941-5.html 399941-5-ref.html
 == 399941-6.html 399941-6-ref.html
 == 399941-7.html 399941-7-ref.html
 == 399941-8.html 399941-8-ref.html
 == 399941-9.html 399941-9-ref.html
 == 429968-1a.html 429968-1-ref.html
-fails-if(styloVsGecko) == 429968-1b.html 429968-1-ref.html
+fails-if(styloVsGecko||stylo) == 429968-1b.html 429968-1-ref.html
 == 429968-2a.html 429968-2-ref.html
 == 429968-2b.html 429968-2-ref.html
 == 429968-2c.html 429968-2-ref.html
 == 441418-1.html 441418-1-ref.html
 == 469227-1.html 469227-1-ref.html
 == 484400-1.html 484400-1-ref.html
 == 594303-1.html 594303-1-ref.html
 fails-if(winWidget||cocoaWidget) == 617869-1.html 617869-1-ref.html
--- a/layout/reftests/first-line/reftest.list
+++ b/layout/reftests/first-line/reftest.list
@@ -1,16 +1,16 @@
 # basic functionality
-fails-if(styloVsGecko) == basic-1.html basic-ref.html
+fails-if(styloVsGecko||stylo) == basic-1.html basic-ref.html
 
 # handling of out-of-flows when ::first-line happens
 == out-of-flow-1a.html out-of-flow-1-ref.html
-fails-if(styloVsGecko) == out-of-flow-1b.html out-of-flow-1-ref.html
+fails-if(styloVsGecko||stylo) == out-of-flow-1b.html out-of-flow-1-ref.html
 == out-of-flow-1c.html out-of-flow-1-ref.html
-fails fails-if(styloVsGecko) == out-of-flow-1d.html out-of-flow-1-ref.html # bug 396645
+fails-if(!stylo) fails-if(styloVsGecko) == out-of-flow-1d.html out-of-flow-1-ref.html # bug 396645
 
 # parent style context correct
 == parent-style-1.html parent-style-1-ref.html
 == parent-style-2.html parent-style-2-ref.html
 == parent-style-3.html parent-style-3-ref.html
 
 # stress-tests
 skip-if(styloVsGecko) load stress-1.html # assertion test
@@ -20,18 +20,18 @@ load stress-4.html # assertion/crash tes
 load stress-5.html # assertion/crash test
 load stress-6.html # assertion/crash test
 load stress-7.html # assertion/crash test
 == stress-8.html stress-8-ref.html # assertion/crash test
 == stress-9.html stress-9-ref.html # assertion/crash test
 load stress-10.html # crash test
 == stress-11.xhtml stress-11-ref.xhtml
 
-fails-if(styloVsGecko) == border-not-apply.html border-not-apply-ref.html
-fails-if(styloVsGecko) == 287088-1.html 287088-1-ref.html
-fails-if(styloVsGecko) == 287088-2.html 287088-2-ref.html
+fails-if(styloVsGecko||stylo) == border-not-apply.html border-not-apply-ref.html
+fails-if(styloVsGecko||stylo) == 287088-1.html 287088-1-ref.html
+fails-if(styloVsGecko||stylo) == 287088-2.html 287088-2-ref.html
 fails-if(styloVsGecko) == 403177-1.html 403177-1-ref.html
-fails-if(styloVsGecko) == 469227-2.html 469227-2-ref.html
-fails-if(styloVsGecko) == 469227-3.html 469227-3-ref.html
+fails-if(styloVsGecko||stylo) == 469227-2.html 469227-2-ref.html
+fails-if(styloVsGecko||stylo) == 469227-3.html 469227-3-ref.html
 
-fails-if(styloVsGecko) == restyle-inside-first-line.html restyle-inside-first-line-ref.html
-fails-if(styloVsGecko) == font-styles.html font-styles-ref.html
-fuzzy-if(OSX==1010,1,2) fails-if(styloVsGecko) == font-styles-nooverflow.html font-styles-ref.html
+fails-if(styloVsGecko||stylo) == restyle-inside-first-line.html restyle-inside-first-line-ref.html
+fails-if(styloVsGecko||stylo) == font-styles.html font-styles-ref.html
+fuzzy-if(OSX==1010,1,2) fails-if(styloVsGecko||stylo) == font-styles-nooverflow.html font-styles-ref.html
--- a/layout/reftests/font-face/reftest.list
+++ b/layout/reftests/font-face/reftest.list
@@ -86,18 +86,18 @@ random-if(cocoaWidget) skip-if(styloVsGe
 skip-if(styloVsGecko) HTTP(..) == insert-rule-1a.html insert-rule-1-ref.html
 skip-if(styloVsGecko) HTTP(..) == insert-rule-1b.html insert-rule-1-ref.html
 skip-if(styloVsGecko) HTTP(..) == delete-rule-1.html delete-rule-1-ref.html
 random-if(styloVsGecko) HTTP(..) == media-query-add-1.html media-query-add-1-ref.html
 random-if(styloVsGecko) HTTP(..) == media-query-remove-1.html media-query-remove-1-ref.html
 HTTP(..) != media-query-add-1-ref.html media-query-remove-1-ref.html
 
 HTTP(..) == ahem-metrics-1.html ahem-metrics-1-ref.html
-skip-if(styloVsGecko) HTTP(..) == ex-unit-1.html ex-unit-1-ref.html
-skip-if(styloVsGecko) HTTP(..) == ex-unit-1-dynamic.html ex-unit-1-ref.html
+skip-if(styloVsGecko) fails-if(stylo) HTTP(..) == ex-unit-1.html ex-unit-1-ref.html
+skip-if(styloVsGecko||stylo) HTTP(..) == ex-unit-1-dynamic.html ex-unit-1-ref.html
 
 == local-1.html local-1-ref.html
 == local-styled-1.html local-styled-1-ref.html
 
 HTTP(..) == synthetic-weight-style.html synthetic-weight-style-ref.html
 HTTP(..) == synthetic-variations.html synthetic-variations-ref.html
 
 # Leak test
--- a/layout/reftests/font-features/reftest.list
+++ b/layout/reftests/font-features/reftest.list
@@ -29,42 +29,42 @@ HTTP(..) == font-features-hlig-4.html fo
 HTTP(..) != font-features-hlig-5.html font-features-hlig.html
 HTTP(..) == font-features-ligatures-none.html font-features-noliga.html
 
 # check that feature in style rule overrides @font-face
 HTTP(..) == font-features-hlig-3.html font-features-noliga.html
 
 # compare font-language-override rendering to lang-tagged rendering
 HTTP(..) == font-features-turkish-override-1.html font-features-turkish.html
-fails-if(styloVsGecko) HTTP(..) == font-features-turkish-override-2.html font-features-turkish.html
+fails-if(styloVsGecko||stylo) HTTP(..) == font-features-turkish-override-2.html font-features-turkish.html
 
 # check use of font-language-override to override explicit lang tag
 HTTP(..) == font-features-turkish-override-3.html font-features-ref.html
-fails-if(styloVsGecko) HTTP(..) == font-features-turkish-override-4.html font-features-ref.html
+fails-if(styloVsGecko||stylo) HTTP(..) == font-features-turkish-override-4.html font-features-ref.html
 HTTP(..) == font-features-turkish-override-5.html font-features-turkish.html
 
 # check that last value wins if a feature is repeated
 HTTP(..) == font-features-order-1.html font-features-ref.html
 HTTP(..) == font-features-order-2.html font-features-noliga.html
 
 # check priority of feature settings vs. font-variant subproperty
 HTTP(..) == font-features-order-3.html font-features-noliga.html
 HTTP(..) == font-features-order-4.html font-features-noliga.html
 HTTP(..) == font-features-order-5.html font-features-hlig.html
 
 # check priority involving feature settings and font-variant-alternates
-fails-if(styloVsGecko) HTTP(..) == alternates-order.html alternates-order-ref.html
+fails-if(styloVsGecko||stylo) HTTP(..) == alternates-order.html alternates-order-ref.html
 
 # check that font-specific values line up with @font-face feature settings
 HTTP(..) == annotations.html annotations-ref.html
 
 # font-variant subproperties
 # test for specific features being on and others off, based on prop values
 # (debug problems with font-variant-debug.html which displays all props)
-fails-if(styloVsGecko) HTTP(..) == font-variant-alternates.html font-variant-alternates-ref.html
+fails-if(styloVsGecko||stylo) HTTP(..) == font-variant-alternates.html font-variant-alternates-ref.html
 HTTP(..) == font-variant-caps.html font-variant-caps-ref.html
 HTTP(..) == font-variant-east-asian.html font-variant-east-asian-ref.html
 HTTP(..) == font-variant-ligatures.html font-variant-ligatures-ref.html
 HTTP(..) == font-variant-numeric.html font-variant-numeric-ref.html
 HTTP(..) == font-variant-position.html font-variant-position-ref.html
 
 # font-kerning
 HTTP(..) != font-kerning-normal.html font-kerning-none.html
--- a/layout/reftests/font-loading-api/reftest.list
+++ b/layout/reftests/font-loading-api/reftest.list
@@ -1,11 +1,11 @@
 default-preferences pref(layout.css.font-loading-api.enabled,true)
 
 HTTP(..) == dynamic-insert-1.html dynamic-insert-1-ref.html
 HTTP(..) == dynamic-remove-1.html dynamic-remove-1-ref.html
-fails-if(styloVsGecko) HTTP(..) == ex-unit-1.html ../font-face/ex-unit-1-ref.html
+fails-if(styloVsGecko||stylo) HTTP(..) == ex-unit-1.html ../font-face/ex-unit-1-ref.html
 fuzzy-if(skiaContent,2,10) HTTP(..) == multiple-sets-1.html multiple-sets-1-ref.html
 HTTP(..) == name-collision.html ../font-face/name-collision-ref.html
 HTTP(..) == order-1.html ../font-face/order-1-ref.html
 HTTP(..) == src-list-1.html ../font-face/src-list-1-ref.html
 HTTP(..) == src-list-2.html ../font-face/src-list-2-ref.html
 HTTP(..) == src-list-data-1.html ../font-face/src-list-data-ref.html
--- a/layout/reftests/forms/fieldset/reftest.list
+++ b/layout/reftests/forms/fieldset/reftest.list
@@ -1,26 +1,26 @@
 fuzzy-if(skiaContent,2,13) == dynamic-legend-scroll-1.html dynamic-legend-scroll-1-ref.html
 == fieldset-hidden-1.html fieldset-hidden-1-ref.html
 == fieldset-intrinsic-width-1.html fieldset-intrinsic-width-1-ref.html
 == fieldset-percentage-padding-1.html fieldset-percentage-padding-1-ref.html
-fails-if(styloVsGecko) == fieldset-scroll-1.html fieldset-scroll-1-ref.html
+fails-if(styloVsGecko||stylo) == fieldset-scroll-1.html fieldset-scroll-1-ref.html
 == fieldset-scrolled-1.html fieldset-scrolled-1-ref.html
 == fieldset-overflow-auto-1.html fieldset-overflow-auto-1-ref.html
 fuzzy-if(winWidget&&!layersGPUAccelerated,140,276) == positioned-container-1.html positioned-container-1-ref.html
 == relpos-legend-1.html relpos-legend-1-ref.html
 == relpos-legend-2.html relpos-legend-2-ref.html
 == relpos-legend-3.html relpos-legend-3-ref.html
 == relpos-legend-4.html relpos-legend-4-ref.html
 == sticky-legend-1.html sticky-legend-1-ref.html
 fuzzy-if(skiaContent,1,40768) == abs-pos-child-sizing.html abs-pos-child-sizing-ref.html
 == overflow-hidden.html overflow-hidden-ref.html
 == legend-rtl.html legend-rtl-ref.html
-fails-if(styloVsGecko) == fieldset-grid-001.html fieldset-grid-001-ref.html
-fails-if(styloVsGecko) == fieldset-flexbox-001.html fieldset-flexbox-001-ref.html
+fails-if(styloVsGecko||stylo) == fieldset-grid-001.html fieldset-grid-001-ref.html
+fails-if(styloVsGecko||stylo) == fieldset-flexbox-001.html fieldset-flexbox-001-ref.html
 == fieldset-min-width-1a.html fieldset-min-width-1-ref.html
 == fieldset-min-width-1b.html fieldset-min-width-1-ref.html
 == fieldset-min-width-2a.html fieldset-min-width-2-ref.html
 == fieldset-min-width-2b.html fieldset-min-width-2-ref.html
 == legend-overlapping-right-border-1.html legend-overlapping-right-border-1-ref.html
 == fieldset-border-image-1a.html fieldset-border-image-1-ref.html
 == fieldset-border-image-1b.html fieldset-border-image-1-ref.html
 == fieldset-border-image-2a.html fieldset-border-image-2-ref.html
--- a/layout/reftests/forms/input/number/reftest.list
+++ b/layout/reftests/forms/input/number/reftest.list
@@ -31,17 +31,17 @@ skip-if(Android) == number-min-height-1.
 skip-if(Android) == number-min-height-2.html number-min-height-2-ref.html
 skip-if(Android) == number-max-height-1.html number-max-height-1-ref.html
 skip-if(Android) == number-max-height-2.html number-max-height-2-ref.html
 
 # number of significant fractional digits:
 == number-significant-fractional-digits.html number-significant-fractional-digits-ref.html
 
 # focus
-fuzzy-if(skiaContent,2,5) needs-focus skip-if(styloVsGecko) == focus-handling.html focus-handling-ref.html
+fuzzy-if(skiaContent,2,5) needs-focus skip-if(styloVsGecko||stylo) == focus-handling.html focus-handling-ref.html
 
 # select
 fuzzy-if(skiaContent,1,1) skip-if(styloVsGecko) == number-selected.html number-selected-ref.html
 
 # pseudo-elements not usable from content:
 == number-pseudo-elements.html number-pseudo-elements-ref.html
 
 == number-placeholder.html number-placeholder-ref.html
--- a/layout/reftests/forms/legend/reftest.list
+++ b/layout/reftests/forms/legend/reftest.list
@@ -1,4 +1,4 @@
 == legend.html legend-ref.html
-fuzzy-if(skiaContent,1,7) pref(dom.webcomponents.enabled,true) fails-if(styloVsGecko) == shadow-dom.html shadow-dom-ref.html
+fuzzy-if(skiaContent,1,7) pref(dom.webcomponents.enabled,true) fails-if(styloVsGecko||stylo) == shadow-dom.html shadow-dom-ref.html
 == 1273433.html 1273433-ref.html
-fails-if(styloVsGecko) == 1339287.html 1339287-ref.html
+fails-if(styloVsGecko||stylo) == 1339287.html 1339287-ref.html
--- a/layout/reftests/forms/reftest.list
+++ b/layout/reftests/forms/reftest.list
@@ -1,13 +1,13 @@
 fuzzy-if(skiaContent,1,10) fails-if(styloVsGecko) HTTP(..) == text-control-baseline-1.html text-control-baseline-1-ref.html
 fuzzy-if(cocoaWidget,16,64) fuzzy-if(Android,52,64) fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu),104,224) fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),88,400) == display-block-baselines-1.html display-block-baselines-1-ref.html # anti-aliasing issues
 == display-block-baselines-2.html display-block-baselines-2-ref.html
 fails-if(styloVsGecko) == display-block-baselines-3.html display-block-baselines-3-ref.html
-fails-if(styloVsGecko) == display-block-baselines-4.html display-block-baselines-4-ref.html
+fails-if(styloVsGecko||stylo) == display-block-baselines-4.html display-block-baselines-4-ref.html
 fuzzy-if(Android,4,8) fuzzy-if(skiaContent,7,2) == display-block-baselines-5.html display-block-baselines-5-ref.html
 
 # button element
 include button/reftest.list
 
 # legend element
 include legend/reftest.list
 
--- a/layout/reftests/forms/textarea/reftest.list
+++ b/layout/reftests/forms/textarea/reftest.list
@@ -1,14 +1,14 @@
 skip-if(Android) fails-if(styloVsGecko) == resize.html resize-ref.html
 # an offset seems to apply to the native resizer on windows so skip this test for now
-skip-if(Android) skip-if(winWidget) fuzzy-if(cocoaWidget,1,33) fuzzy-if(skiaContent&&!winWidget&&!Android,5,10) fails-if(styloVsGecko) == resize-background.html resize-background-ref.html
-skip-if(Android) fails-if(styloVsGecko) != ltr.html rtl.html
+skip-if(Android) skip-if(winWidget) fuzzy-if(cocoaWidget,1,33) fuzzy-if(skiaContent&&!winWidget&&!Android,5,10) fails-if(styloVsGecko||stylo) == resize-background.html resize-background-ref.html
+skip-if(Android) fails-if(styloVsGecko||stylo) != ltr.html rtl.html
 skip-if(Android) != ltr-scrollbar.html rtl-scrollbar.html
 skip-if(Android) != in-ltr-doc-scrollbar.html in-rtl-doc-scrollbar.html
-skip-if(Android) fails-if(styloVsGecko) != ltr.html no-resize.html
-skip-if(Android) fails-if(xulRuntime.widgetToolkit=="gtk2") fails-if(styloVsGecko) != rtl.html no-resize.html # bug 834724
+skip-if(Android) fails-if(styloVsGecko||stylo) != ltr.html no-resize.html
+skip-if(Android) fails-if(xulRuntime.widgetToolkit=="gtk2") fails-if(styloVsGecko||stylo) != rtl.html no-resize.html # bug 834724
 fuzzy-if(skiaContent,1,1) fails-if(styloVsGecko) == rtl.html rtl-dynamic-attr.html
 fuzzy-if(skiaContent,1,1) fails-if(styloVsGecko) == rtl.html rtl-dynamic-style.html
 fails-if(styloVsGecko) == rtl.html in-dynamic-rtl-doc.html
 fuzzy-if(skiaContent,1,3) fails-if(styloVsGecko) == setvalue-framereconstruction-1.html setvalue-framereconstruction-ref.html
-fuzzy-if(asyncPan&&!layersGPUAccelerated,102,4168) fails-if(styloVsGecko) == padding-scrollbar-placement.html padding-scrollbar-placement-ref.html
+fuzzy-if(asyncPan&&!layersGPUAccelerated,102,4168) fails-if(styloVsGecko||stylo) == padding-scrollbar-placement.html padding-scrollbar-placement-ref.html
 fails-if(styloVsGecko) == various-cols.html various-cols-ref.html
--- a/layout/reftests/image/reftest.list
+++ b/layout/reftests/image/reftest.list
@@ -38,29 +38,29 @@ fuzzy(1,1) == image-orientation-explicit
 fuzzy(1,1) == image-orientation-explicit.html?180      image-orientation-ref.html?180
 fuzzy(1,1) == image-orientation-explicit.html?270      image-orientation-ref.html?270
 fuzzy(1,1) == image-orientation-explicit.html?0&flip   image-orientation-ref.html?0&flip
 fuzzy(1,1) == image-orientation-explicit.html?90&flip  image-orientation-ref.html?90&flip
 fuzzy(1,1) == image-orientation-explicit.html?180&flip image-orientation-ref.html?180&flip
 fuzzy(1,1) == image-orientation-explicit.html?270&flip image-orientation-ref.html?270&flip
 
 # Tests for image-orientation used with non-axis-aligned angles:
-fuzzy(1,1) fails-if(styloVsGecko) == image-orientation-explicit.html?-45      image-orientation-ref.html?0
+fuzzy(1,1) fails-if(styloVsGecko||stylo) == image-orientation-explicit.html?-45      image-orientation-ref.html?0
 fuzzy(1,1) == image-orientation-explicit.html?-15      image-orientation-ref.html?0
 fuzzy(1,1) == image-orientation-explicit.html?15       image-orientation-ref.html?0
 fuzzy(1,1) == image-orientation-explicit.html?45       image-orientation-ref.html?90
 fuzzy(1,1) == image-orientation-explicit.html?75       image-orientation-ref.html?90
 fuzzy(1,1) == image-orientation-explicit.html?105      image-orientation-ref.html?90
 fuzzy(1,1) == image-orientation-explicit.html?135      image-orientation-ref.html?180
 fuzzy(1,1) == image-orientation-explicit.html?165      image-orientation-ref.html?180
 fuzzy(1,1) == image-orientation-explicit.html?195      image-orientation-ref.html?180
 fuzzy(1,1) == image-orientation-explicit.html?225      image-orientation-ref.html?270
 fuzzy(1,1) == image-orientation-explicit.html?255      image-orientation-ref.html?270
 fuzzy(1,1) == image-orientation-explicit.html?285      image-orientation-ref.html?270
-fuzzy(1,1) fails-if(styloVsGecko) == image-orientation-explicit.html?315      image-orientation-ref.html?0
+fuzzy(1,1) fails-if(styloVsGecko||stylo) == image-orientation-explicit.html?315      image-orientation-ref.html?0
 fuzzy(1,1) == image-orientation-explicit.html?345      image-orientation-ref.html?0
 
 # Tests for image-orientation used on generated content:
 fuzzy(1,1) == image-orientation-generated-content.html?from-image image-orientation-generated-content-ref.html?270&flip
 fuzzy(1,1) == image-orientation-generated-content.html?0          image-orientation-generated-content-ref.html?0
 fuzzy(1,1) == image-orientation-generated-content.html?90         image-orientation-generated-content-ref.html?90
 fuzzy(1,1) == image-orientation-generated-content.html?180        image-orientation-generated-content-ref.html?180
 fuzzy(1,1) == image-orientation-generated-content.html?270        image-orientation-generated-content-ref.html?270
--- a/layout/reftests/mathml/reftest.list
+++ b/layout/reftests/mathml/reftest.list
@@ -6,18 +6,18 @@ random-if(gtkWidget) == dir-3.html dir-3
 == dir-6.html dir-6-ref.html
 == dir-6a.html dir-6a-ref.html
 == dir-7.html dir-7-ref.html
 fails-if(!styloVsGecko) == dir-8.html dir-8-ref.html
 fails-if(!styloVsGecko) == dir-9.html dir-9-ref.html # Bug 787215
 == dir-10.html dir-10-ref.html
 == dir-11.html dir-11-ref.html
 == css-spacing-1.html css-spacing-1-ref.html
-pref(mathml.disabled,true) fails-if(styloVsGecko) == disabled-scriptlevel-1.html disabled-scriptlevel-1-ref.html
-pref(mathml.disabled,true) fails-if(styloVsGecko) == disabled-scriptlevel-1.xhtml disabled-scriptlevel-1-ref.xhtml
+pref(mathml.disabled,true) fails-if(styloVsGecko||stylo) == disabled-scriptlevel-1.html disabled-scriptlevel-1-ref.html
+pref(mathml.disabled,true) fails-if(styloVsGecko||stylo) == disabled-scriptlevel-1.xhtml disabled-scriptlevel-1-ref.xhtml
 == displaystyle-1.html displaystyle-1-ref.html
 == displaystyle-2.html displaystyle-2-ref.html
 == displaystyle-3.html displaystyle-3-ref.html
 == displaystyle-4.html displaystyle-4-ref.html
 random-if(smallScreen&&Android) fuzzy(255,200) == mirror-op-1.html mirror-op-1-ref.html
 != mirror-op-2.html mirror-op-2-ref.html
 != mirror-op-3.html mirror-op-3-ref.html
 != mirror-op-4.html mirror-op-4-ref.html
@@ -289,18 +289,18 @@ fails-if(Android) == mathvariant-1a.html
 fails-if(Android) == mathvariant-1b.html mathvariant-1b-ref.html # Bug 1010679
 fails-if(Android) == mathvariant-1c.html mathvariant-1c-ref.html # Bug 1010679
 == mathvariant-1d.html mathvariant-1d-ref.html
 fails-if(Android||OSX) == mathvariant-2.html mathvariant-2-ref.html # Bugs 1010678, 1010679
 == mathvariant-3.html mathvariant-3-ref.html
 == mathvariant-4.html mathvariant-4-ref.html
 == mathvariant-5.html mathvariant-5-ref.html
 == dtls-1.html dtls-1-ref.html
-fails-if(styloVsGecko) == dtls-2.html dtls-2-ref.html # bug 1366206
-fails-if(styloVsGecko) == dtls-3.html dtls-3-ref.html # bug 1366206
+fails-if(styloVsGecko||stylo) == dtls-2.html dtls-2-ref.html # bug 1366206
+fails-if(styloVsGecko||stylo) == dtls-3.html dtls-3-ref.html # bug 1366206
 == ssty-1.html ssty-1-ref.html
 == ssty-2.html ssty-2-ref.html
 == ssty-3.html ssty-3-ref.html
 == ssty-4.html ssty-4-ref.html
 == mathscript-1.html mathscript-1-ref.html
 == mathscript-2.html mathscript-2-ref.html
 == mo-accent-dynamic.html mo-accent-dynamic-ref.html
 == mo-movablelimits-dynamic.html mo-movablelimits-dynamic-ref.html
@@ -364,17 +364,17 @@ fuzzy-if(OSX,1,100) fuzzy-if(skiaContent
 == mfrac-C-4.html mfrac-C-4-ref.html
 fuzzy-if(OSX,1,100) fuzzy-if(skiaContent,1,14) == mfrac-D-1.html mfrac-D-1-ref.html
 == mfrac-D-2.html mfrac-D-2-ref.html
 == mfrac-D-3.html mfrac-D-3-ref.html
 == mfrac-D-4.html mfrac-D-4-ref.html
 == mfrac-E-1.html mfrac-E-1-ref.html
 test-pref(dom.webcomponents.enabled,true) == shadow-dom-1.html shadow-dom-1-ref.html
 pref(font.size.inflation.emPerLine,25) == font-inflation-1.html font-inflation-1-ref.html
-test-pref(font.minimum-size.x-math,40) fails-if(styloVsGecko) == default-font.html default-font-ref.html
+test-pref(font.minimum-size.x-math,40) == default-font.html default-font-ref.html
 != radicalbar-1.html about:blank
 != radicalbar-1a.html about:blank
 != radicalbar-1b.html about:blank
 != radicalbar-1c.html about:blank
 != radicalbar-1d.html about:blank
 != radicalbar-2.html about:blank
 != radicalbar-2a.html about:blank
 != radicalbar-2b.html about:blank
--- a/layout/reftests/native-theme/reftest.list
+++ b/layout/reftests/native-theme/reftest.list
@@ -7,17 +7,17 @@
 != listbox-not-blank.html about:blank
 != radio-not-blank.html about:blank
 != text-control-not-blank.html about:blank
 fails-if(styloVsGecko) != textarea-not-blank.html about:blank
 
 # The following tests will fail if the platform does not have native
 # theme support (which all platforms should have).
 fails-if(!nativeThemePref) != text-input-native.html text-input-nonnative.html
-fuzzy-if(skiaContent,2,88) fails-if(styloVsGecko) == text-input-nonnative-when-styled.html text-input-nonnative-when-styled-ref.html
+fuzzy-if(skiaContent,2,88) fails-if(styloVsGecko||stylo) == text-input-nonnative-when-styled.html text-input-nonnative-when-styled-ref.html
 fails-if(!nativeThemePref) fails-if(styloVsGecko) != textarea-native.html textarea-nonnative.html
 fuzzy-if(skiaContent,2,53) fails-if(styloVsGecko) == textarea-nonnative-when-styled.html textarea-nonnative-when-styled-ref.html
 fails-if(!nativeThemePref) != button-native.html button-nonnative.html
 == button-nonnative-when-styled.html button-nonnative-when-styled-ref.html
 fails-if(!nativeThemePref&&!Android) != combobox-native.html combobox-nonnative.html
 == combobox-nonnative-when-styled.html combobox-nonnative-when-styled-ref.html
 fails-if(!nativeThemePref) needs-focus != listbox-native.html listbox-nonnative.html
 needs-focus == listbox-nonnative-when-styled.html listbox-nonnative-when-styled-ref.html
--- a/layout/reftests/pagination/reftest.list
+++ b/layout/reftests/pagination/reftest.list
@@ -69,9 +69,9 @@ fuzzy-if(skiaContent,1,23) == resize-ref
 == table-caption-splitaftercaption-5.html table-caption-splitaftercaption-5-ref.html
 == table-caption-splitaftercaption-6.html table-caption-splitaftercaption-6-ref.html
 == table-caption-splitaftercaption-7.html table-caption-splitaftercaption-7-ref.html
 # == table-caption-splitaftercaption-8.html blank.html # bug 672654
 # == table-caption-splitaftercaption-9.html blank.html # bug 672654
 # == table-caption-splitaftercaption-10.html blank.html # bug 672654
 # == table-caption-splitaftercaption-11.html blank.html # bug 672654
 == column-balancing-break-inside-avoid-2.html column-balancing-break-inside-avoid-2-ref.html
-fails-if(styloVsGecko) == combobox-page-break-inside.html combobox-page-break-inside-ref.html
+fails-if(styloVsGecko||stylo) == combobox-page-break-inside.html combobox-page-break-inside-ref.html
--- a/layout/reftests/pixel-rounding/reftest.list
+++ b/layout/reftests/pixel-rounding/reftest.list
@@ -174,10 +174,10 @@ fuzzy-if(skiaContent,1,145) == rounded-b
 == background-image-tiling.html background-image-tiling-ref.html
 
 != border-image-width-0.html border-image-width-10.html
 == border-image-width-4.html border-image-width-0.html
 == border-image-width-9.html border-image-width-0.html
 
 == iframe-1.html iframe-1-ref.html
 
-fails-if(styloVsGecko) == viewport-units-rounding-1.html viewport-units-rounding-1-ref.html
+fails-if(styloVsGecko||stylo) == viewport-units-rounding-1.html viewport-units-rounding-1-ref.html
 == viewport-units-rounding-2.html about:blank
--- a/layout/reftests/printing/reftest.list
+++ b/layout/reftests/printing/reftest.list
@@ -18,17 +18,17 @@
 == 577450-1.html 577450-1-ref.html
 == 626395-1a.html 626395-1-ref.html
 == 626395-1b.html 626395-1-ref.html
 == 626395-2a.html 626395-2-ref.html
 == 626395-2b.html 626395-2-ref.html
 == 626395-2c.html 626395-2-ref.html
 == 626395-2d.html 626395-2-ref.html
 == 652178-1.html 652178-1-ref.html
-fails-if(styloVsGecko) == 115199-1.html 115199-1-ref.html
+fails-if(styloVsGecko||stylo) == 115199-1.html 115199-1-ref.html
 == 115199-2a.html 115199-2-ref.html
 == 115199-2b.html 115199-2-ref.html
 == 652178-1.html 652178-1-ref2.html
 fuzzy-if(cocoaWidget,1,5000) == 745025-1.html 745025-1-ref.html
 == 820496-1.html 820496-1-ref.html
 
 # NOTE: These tests don't yet rigorously test what they're
 # trying to test (shrink-to-fit behavior), due to bug 967311.
--- a/layout/reftests/scoped-style/reftest.list
+++ b/layout/reftests/scoped-style/reftest.list
@@ -1,57 +1,57 @@
-fails-if(styloVsGecko) == scoped-style-001.html scoped-style-001-ref.html
-fails-if(styloVsGecko) == scoped-style-002.html scoped-style-002-ref.html
-fails-if(styloVsGecko) == scoped-style-003.html scoped-style-003-ref.html
-fails-if(styloVsGecko) == scoped-style-004.html scoped-style-004-ref.html
-fails-if(styloVsGecko) == scoped-style-005.html scoped-style-005-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-001.html scoped-style-001-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-002.html scoped-style-002-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-003.html scoped-style-003-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-004.html scoped-style-004-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-005.html scoped-style-005-ref.html
 == scoped-style-006.html scoped-style-006-ref.html
 == scoped-style-007.html scoped-style-007-ref.html
-fails-if(styloVsGecko) == scoped-style-008.html scoped-style-008-ref.html
-fails-if(styloVsGecko) == scoped-style-009.html scoped-style-009-ref.html
-fails-if(styloVsGecko) == scoped-style-010.html scoped-style-010-ref.html
-fails-if(styloVsGecko) == scoped-style-011.html scoped-style-011-ref.html
-fails-if(styloVsGecko) == scoped-style-012.html scoped-style-012-ref.html
-fails-if(styloVsGecko) == scoped-style-013.html scoped-style-013-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-008.html scoped-style-008-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-009.html scoped-style-009-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-010.html scoped-style-010-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-011.html scoped-style-011-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-012.html scoped-style-012-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-013.html scoped-style-013-ref.html
 == scoped-style-014.html scoped-style-014-ref.html
-fails-if(styloVsGecko) == scoped-style-015.html scoped-style-015-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-015.html scoped-style-015-ref.html
 == scoped-style-016.html scoped-style-016-ref.html
-fails-if(styloVsGecko) == scoped-style-017.html scoped-style-017-ref.html
-fails-if(styloVsGecko) == scoped-style-018.html scoped-style-018-ref.html
-fails-if(styloVsGecko) == scoped-style-019.svg scoped-style-019-ref.svg
+fails-if(styloVsGecko||stylo) == scoped-style-017.html scoped-style-017-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-018.html scoped-style-018-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-019.svg scoped-style-019-ref.svg
 == scoped-style-020.html scoped-style-020-ref.html
 == scoped-style-021.html scoped-style-021-ref.html
 == scoped-style-022.html scoped-style-022-ref.html
-fails-if(styloVsGecko) == scoped-style-023.html scoped-style-023-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-023.html scoped-style-023-ref.html
 == scoped-style-024.html scoped-style-024-ref.html
 == scoped-style-important-001.html scoped-style-important-001-ref.html
-fails-if(styloVsGecko) == scoped-style-important-002.html scoped-style-important-002-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-important-002.html scoped-style-important-002-ref.html
 == scoped-style-important-003.html scoped-style-important-003-ref.html
 == scoped-style-important-004.html scoped-style-important-004-ref.html
 == scoped-style-important-005.html scoped-style-important-005-ref.html
 == scoped-style-important-006.html scoped-style-important-006-ref.html
 == scoped-style-important-007.html scoped-style-important-007-ref.html
-fails-if(styloVsGecko) == scoped-style-dynamic-001.html scoped-style-dynamic-001-ref.html
-fails-if(styloVsGecko) == scoped-style-dynamic-002.html scoped-style-dynamic-002-ref.html
-fails-if(styloVsGecko) == scoped-style-dynamic-003.html scoped-style-dynamic-003-ref.html
-fails-if(styloVsGecko) == scoped-style-dynamic-004.html scoped-style-dynamic-004-ref.html
-asserts-if(styloVsGecko,1) == scoped-style-dynamic-005.html scoped-style-dynamic-005-ref.html
-skip-if(styloVsGecko) == scoped-style-dynamic-006.html scoped-style-dynamic-006-ref.html
-fails-if(styloVsGecko) == scoped-style-dynamic-007.html scoped-style-dynamic-007-ref.html
-fails-if(styloVsGecko) == scoped-style-dynamic-008.html scoped-style-dynamic-008-ref.html
-skip-if(styloVsGecko) == scoped-style-dynamic-009.html scoped-style-dynamic-009-ref.html
-asserts-if(styloVsGecko,1) == scoped-style-dynamic-010.html scoped-style-dynamic-010-ref.html
-fails-if(styloVsGecko) == scoped-style-dynamic-011.html scoped-style-dynamic-011-ref.html
-asserts-if(styloVsGecko,1) == scoped-style-dynamic-012.svg scoped-style-dynamic-012-ref.svg
-fails-if(styloVsGecko) asserts-if(styloVsGecko,1) == scoped-style-dynamic-013.svg scoped-style-dynamic-013-ref.svg
-asserts-if(styloVsGecko,1) == scoped-style-dynamic-014.svg scoped-style-dynamic-014-ref.svg
-fails-if(styloVsGecko) asserts-if(styloVsGecko,1) == scoped-style-dynamic-015.svg scoped-style-dynamic-015-ref.svg
-fails-if(styloVsGecko) == scoped-style-import.html scoped-style-import-ref.html
-fails-if(styloVsGecko) == scoped-style-media.html scoped-style-media-ref.html
-fails-if(styloVsGecko) == scoped-style-namespace.html scoped-style-namespace-ref.html
-fails-if(styloVsGecko) == scoped-style-charset.html scoped-style-charset-ref.html
-fails-if(styloVsGecko) == scoped-style-document.html scoped-style-document-ref.html
-fails-if(styloVsGecko) HTTP(..) == scoped-style-font-face.html scoped-style-font-face-ref.html
-fails-if(styloVsGecko) == scoped-style-keyframes.html scoped-style-keyframes-ref.html
-fails-if(styloVsGecko) == scoped-style-supports.html scoped-style-supports-ref.html
-pref(layout.css.scope-pseudo.enabled,true) fails-if(styloVsGecko) == scoped-style-pseudo-001.html scoped-style-pseudo-001-ref.html
-pref(layout.css.scope-pseudo.enabled,true) fails-if(styloVsGecko) == scoped-style-pseudo-002.html scoped-style-pseudo-002-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-dynamic-001.html scoped-style-dynamic-001-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-dynamic-002.html scoped-style-dynamic-002-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-dynamic-003.html scoped-style-dynamic-003-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-dynamic-004.html scoped-style-dynamic-004-ref.html
+asserts-if(styloVsGecko,1) asserts-if(stylo,1) == scoped-style-dynamic-005.html scoped-style-dynamic-005-ref.html
+skip-if(styloVsGecko) asserts-if(stylo,1) fails-if(stylo) == scoped-style-dynamic-006.html scoped-style-dynamic-006-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-dynamic-007.html scoped-style-dynamic-007-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-dynamic-008.html scoped-style-dynamic-008-ref.html
+skip-if(styloVsGecko) asserts-if(stylo,1) fails-if(stylo) == scoped-style-dynamic-009.html scoped-style-dynamic-009-ref.html
+asserts-if(styloVsGecko,1) asserts-if(stylo,1) == scoped-style-dynamic-010.html scoped-style-dynamic-010-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-dynamic-011.html scoped-style-dynamic-011-ref.html
+asserts-if(styloVsGecko,1) asserts-if(stylo,1) == scoped-style-dynamic-012.svg scoped-style-dynamic-012-ref.svg
+fails-if(styloVsGecko) asserts-if(styloVsGecko,1) asserts-if(stylo,1) fails-if(stylo) == scoped-style-dynamic-013.svg scoped-style-dynamic-013-ref.svg
+asserts-if(styloVsGecko,1) asserts-if(stylo,1) == scoped-style-dynamic-014.svg scoped-style-dynamic-014-ref.svg
+fails-if(styloVsGecko) asserts-if(styloVsGecko,1) asserts-if(stylo,1) fails-if(stylo) == scoped-style-dynamic-015.svg scoped-style-dynamic-015-ref.svg
+fails-if(styloVsGecko||stylo) == scoped-style-import.html scoped-style-import-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-media.html scoped-style-media-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-namespace.html scoped-style-namespace-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-charset.html scoped-style-charset-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-document.html scoped-style-document-ref.html
+fails-if(styloVsGecko||stylo) HTTP(..) == scoped-style-font-face.html scoped-style-font-face-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-keyframes.html scoped-style-keyframes-ref.html
+fails-if(styloVsGecko||stylo) == scoped-style-supports.html scoped-style-supports-ref.html
+pref(layout.css.scope-pseudo.enabled,true) fails-if(styloVsGecko||stylo) == scoped-style-pseudo-001.html scoped-style-pseudo-001-ref.html
+pref(layout.css.scope-pseudo.enabled,true) fails-if(styloVsGecko||stylo) == scoped-style-pseudo-002.html scoped-style-pseudo-002-ref.html
 pref(layout.css.scope-pseudo.enabled,true) == scoped-style-pseudo-003.html scoped-style-pseudo-003-ref.html
--- a/layout/reftests/svg/as-image/reftest.list
+++ b/layout/reftests/svg/as-image/reftest.list
@@ -52,40 +52,40 @@ fuzzy(1,2) fuzzy-if(azureSkia,1,40000) =
 == canvas-drawImage-slice-1b.html lime100x100-ref.html
 
 == canvas-drawImage-origin-clean-1.html lime100x100-ref.html
 == canvas-drawImage-transform-restored.html canvas-drawImage-transform-restored-ref.html
 
 # Context paint tests (this feature is currently not part of any spec.)
 # context-fill:
 == context-fill-01.html blue100x100-ref.html
-fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) == context-fill-01.html lime100x100-ref.html
+fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) fails-if(stylo) == context-fill-01.html lime100x100-ref.html
 == context-fill-02.html transparent100x100-w-border-ref.html
-fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) == context-fill-02.html lime100x100-w-border-ref.html
-fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) == context-fill-03.html lime100x100-50pct-ref.html
+fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) fails-if(stylo) == context-fill-02.html lime100x100-w-border-ref.html
+fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) fails-if(stylo) == context-fill-03.html lime100x100-50pct-ref.html
 # fuzz because on win8 the r & b components are off by one
-fails-if(styloVsGecko) fuzzy-if(winWidget,1,10000) test-pref(svg.context-properties.content.enabled,true) == context-fill-04.html lime100x100-50pct-ref.html
-fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) == context-fill-05.html context-fill-or-stroke-05-ref.html
-fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) == context-fill-06.html lime100x100-ref.html
-fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) == context-fill-07.html context-fill-07-ref.html
+fails-if(styloVsGecko) fuzzy-if(winWidget,1,10000) test-pref(svg.context-properties.content.enabled,true) fails-if(stylo) == context-fill-04.html lime100x100-50pct-ref.html
+fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) fails-if(stylo) == context-fill-05.html context-fill-or-stroke-05-ref.html
+fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) fails-if(stylo) == context-fill-06.html lime100x100-ref.html
+fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) fails-if(stylo) == context-fill-07.html context-fill-07-ref.html
 test-pref(svg.context-properties.content.enabled,true) == context-fill-08.html blue100x100-ref.html
-fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) == context-fill-bg-image-01.html blue100x100-ref.html
+fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) fails-if(stylo) == context-fill-bg-image-01.html blue100x100-ref.html
 # context-stroke:
 == context-stroke-01.html blue100x100-ref.html
-fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) == context-stroke-01.html lime100x100-ref.html
+fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) fails-if(stylo) == context-stroke-01.html lime100x100-ref.html
 == context-stroke-02.html transparent100x100-w-border-ref.html
-fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) == context-stroke-02.html lime100x100-w-border-ref.html
-fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) == context-stroke-03.html lime100x100-50pct-ref.html
+fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) fails-if(stylo) == context-stroke-02.html lime100x100-w-border-ref.html
+fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) fails-if(stylo) == context-stroke-03.html lime100x100-50pct-ref.html
 # fuzz because on win8 the r & b components are off by one
-fails-if(styloVsGecko) fuzzy-if(winWidget,1,10000) test-pref(svg.context-properties.content.enabled,true) == context-stroke-04.html lime100x100-50pct-ref.html
-fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) == context-stroke-05.html context-fill-or-stroke-05-ref.html
-fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) == context-stroke-06.html lime100x100-ref.html
+fails-if(styloVsGecko) fuzzy-if(winWidget,1,10000) test-pref(svg.context-properties.content.enabled,true) fails-if(stylo) == context-stroke-04.html lime100x100-50pct-ref.html
+fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) fails-if(stylo) == context-stroke-05.html context-fill-or-stroke-05-ref.html
+fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) fails-if(stylo) == context-stroke-06.html lime100x100-ref.html
 test-pref(svg.context-properties.content.enabled,true) == context-stroke-07.html context-stroke-07-ref.html
 test-pref(svg.context-properties.content.enabled,true) == context-stroke-08.html blue100x100-border-ref.html
-fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) == context-stroke-bg-image-01.html blue100x100-border-ref.html
+fails-if(styloVsGecko) test-pref(svg.context-properties.content.enabled,true) fails-if(stylo) == context-stroke-bg-image-01.html blue100x100-border-ref.html
 
 # Simple <img> tests
 == img-simple-1.html  lime100x100-ref.html
 == img-simple-2.html  lime100x100-ref.html
 fuzzy-if(skiaContent,255,350) == img-simple-3.html  img-simple-3-ref.html
 == img-simple-4.html  lime100x100-ref.html
 fuzzy-if(skiaContent,255,90) == img-simple-5.html  img-simple-5-ref.html
 == img-simple-6.html  lime100x100-ref.html
--- a/layout/reftests/svg/filters/css-filters/reftest.list
+++ b/layout/reftests/svg/filters/css-filters/reftest.list
@@ -5,17 +5,17 @@ default-preferences pref(layout.css.filt
 
 == blur.html blur-ref.html
 == blur.svg blur-ref.svg
 == blur-calc.html blur-calc-ref.html
 == blur-calc-negative.html blur-calc-negative-ref.html
 skip-if(d2d) == blur-cap-large-radius-on-software.html blur-cap-large-radius-on-software-ref.html
 == blur-em-radius.html blur-em-radius-ref.html
 == blur-invalid-radius.html blur-invalid-radius-ref.html
-fails-if(stylo) == blur-rem-radius.html blur-rem-radius-ref.html
+== blur-rem-radius.html blur-rem-radius-ref.html
 == blur-zero-radius.html blur-zero-radius-ref.html
 == blur-zoomed-page.html blur-zoomed-page-ref.html
 == brightness.html brightness-ref.html
 == brightness-darken.html brightness-darken-ref.html
 == brightness-extreme.html brightness-extreme-ref.html
 == brightness-one.html brightness-one-ref.html
 == brightness-percent.html brightness-percent-ref.html
 == brightness-zero.html brightness-zero-ref.html
--- a/layout/reftests/svg/reftest.list
+++ b/layout/reftests/svg/reftest.list
@@ -90,19 +90,19 @@ default-preferences
 == conditions-02.svg pass.svg
 == conditions-03.svg pass.svg
 == conditions-04.svg pass.svg
 == conditions-05.svg about:blank
 == conditions-07.svg pass.svg
 fuzzy-if(skiaContent,1,320) == conditions-08.svg conditions-08-ref.svg
 == conditions-09.svg conditions-09-ref.svg
 
-fails-if(styloVsGecko) == currentColor-01.svg pass.svg
-fails-if(styloVsGecko) == currentColor-02.svg pass.svg
-fails-if(styloVsGecko) == currentColor-03.svg pass.svg
+fails-if(styloVsGecko||stylo) == currentColor-01.svg pass.svg
+fails-if(styloVsGecko||stylo) == currentColor-02.svg pass.svg
+fails-if(styloVsGecko||stylo) == currentColor-03.svg pass.svg
 
 == data-uri-with-filter-01.xhtml data-uri-with-filter-01-ref.svg
 == data-uri-with-gradient-01.xhtml data-uri-with-gradient-01-ref.svg
 == data-uri-with-pattern-01.xhtml pass.svg
 
 == dynamic-attr-removal-1.svg pass.svg
 == dynamic-attr-removal-2.svg pass.svg
 == dynamic-attr-change-1.svg pass.svg
@@ -284,17 +284,17 @@ fuzzy(1,5000) == mask-opacity-01.svg mas
 != mask-root-svg.svg about:blank
 == mask-transformed-01.svg mask-transformed-01-ref.svg
 == mask-transformed-02.svg pass.svg
 == mask-transformed-child-01.svg mask-transformed-child-01-ref.svg
 # fuzzy because of the differences between clipPath and mask clipping
 fuzzy-if(d2d||skiaContent,1,6400) == mask-type-01.svg mask-type-01-ref.svg
 fuzzy-if(d2d||skiaContent,1,6400) == mask-type-02.svg mask-type-01-ref.svg
 fuzzy-if(d2d||skiaContent,1,6400) == mask-type-03.svg mask-type-01-ref.svg
-fuzzy-if(d2d||skiaContent,1,6400) fails-if(styloVsGecko) == mask-type-04.svg mask-type-01-ref.svg
+fuzzy-if(d2d||skiaContent,1,6400) fails-if(styloVsGecko||stylo) == mask-type-04.svg mask-type-01-ref.svg
 == mask-use-element-01.svg pass.svg
 
 != nested-mask-mode.svg about:blank
 == nested-viewBox-01.svg pass.svg
 fuzzy-if(skiaContent,3,448000) == nesting-invalid-01.svg nesting-invalid-01-ref.svg
 
 fuzzy-if(d2d&&/^Windows\x20NT\x20(6\.1|10\.0)/.test(http.oscpu),63,168) fuzzy-if(cocoaWidget,1,122) fuzzy-if(skiaContent,2,1000) == non-scaling-stroke-01.svg non-scaling-stroke-01-ref.svg # bug 1074161 for Win7 and OSX 10.8
 fuzzy-if(gtkWidget,1,99) fuzzy-if(!contentSameGfxBackendAsCanvas,9,99) fuzzy-if(Android,9,586) == non-scaling-stroke-02.svg non-scaling-stroke-02-ref.svg
--- a/layout/reftests/svg/smil/container/reftest.list
+++ b/layout/reftests/svg/smil/container/reftest.list
@@ -1,17 +1,17 @@
 # Tests related to SVG Animation (using SMIL), focusing on animation-sorting
 # to see which animation takes precedence (out of multiple animations on the
 # same attribute)
 
 random == enveloped-tree-1.xhtml enveloped-tree-1-ref.xhtml  # bug 470868
 fuzzy-if(cocoaWidget&&layersGPUAccelerated,1,3) fuzzy-if(skiaContent,1,810) == promoted-tree-1.xhtml promoted-tree-1-ref.xhtml
 random == moved-tree-1.xhtml moved-tree-1-ref.xhtml  # bug 470868
-random-if(cocoaWidget||d2d) fails-if(styloVsGecko) == deferred-anim-1.xhtml deferred-anim-1-ref.xhtml # bug 470868, bug 585484
-random-if(cocoaWidget&&layersGPUAccelerated) fails-if(styloVsGecko) == deferred-tree-1.xhtml deferred-tree-1-ref.xhtml # bug 470868
+random-if(cocoaWidget||d2d) fails-if(styloVsGecko||stylo) == deferred-anim-1.xhtml deferred-anim-1-ref.xhtml # bug 470868, bug 585484
+random-if(cocoaWidget&&layersGPUAccelerated) fails-if(styloVsGecko||stylo) == deferred-tree-1.xhtml deferred-tree-1-ref.xhtml # bug 470868
 random-if(cocoaWidget&&layersGPUAccelerated) fuzzy-if(skiaContent,1,530) == deferred-tree-2a.xhtml deferred-tree-2-ref.xhtml # bug 470868
 random-if(cocoaWidget&&layersGPUAccelerated) fuzzy-if(skiaContent,1,530) == deferred-tree-2b.xhtml deferred-tree-2-ref.xhtml # bug 470868
 fuzzy-if(cocoaWidget&&layersGPUAccelerated,1,16) fuzzy-if(skiaContent,1,410) == deferred-tree-3a.xhtml deferred-tree-3-ref.xhtml
 fuzzy-if(cocoaWidget&&layersGPUAccelerated,1,16) fuzzy-if(skiaContent,1,110) == deferred-tree-3b.xhtml deferred-tree-3-ref.xhtml
 fuzzy-if(cocoaWidget&&layersGPUAccelerated,1,16) fuzzy-if(skiaContent,1,110) == deferred-tree-3c.xhtml deferred-tree-3-ref.xhtml
 fuzzy-if(cocoaWidget&&layersGPUAccelerated,1,16) fuzzy-if(skiaContent,1,110) == deferred-tree-3d.xhtml deferred-tree-3-ref.xhtml
 # this will occasionally fail until we correctly clear animation effects from
 # no-longer-targeted elements
--- a/layout/reftests/svg/smil/event/reftest.list
+++ b/layout/reftests/svg/smil/event/reftest.list
@@ -1,32 +1,32 @@
 # Tests related to SVG Animation (using SMIL) that use event timing.
 
-fails-if(styloVsGecko) == event-begin-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-begin-offset-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-begin-offset-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-begin-timeevent-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-begin-timeevent-2.svg green-box-ref.svg
-random-if(Android) fails-if(styloVsGecko) == event-begin-timeevent-3.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-begin-load-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-bubble-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-custom-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-begin-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-begin-offset-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-begin-offset-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-begin-timeevent-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-begin-timeevent-2.svg green-box-ref.svg
+random-if(Android) fails-if(styloVsGecko||stylo) == event-begin-timeevent-3.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-begin-load-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-bubble-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-custom-1.svg green-box-ref.svg
 == event-end-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-end-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-end-open-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-end-trimmed-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-preventDefault-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-seek-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-target-default-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-target-default-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-target-id-change-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-end-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-end-open-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-end-trimmed-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-preventDefault-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-seek-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-target-default-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-target-default-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-target-id-change-1.svg green-box-ref.svg
 == event-target-id-change-2.svg green-box-ref.svg
 == event-target-id-change-3.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-target-xlink-change-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-target-xlink-change-1.svg green-box-ref.svg
 == event-target-xlink-change-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-target-xlink-change-3.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-target-xlink-change-3.svg green-box-ref.svg
 == event-target-xlink-change-4.svg green-box-ref.svg
 == event-target-surgery-1.svg green-box-ref.svg
 == event-target-surgery-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-target-surgery-3.svg green-box-ref.svg
-fails-if(styloVsGecko) == event-target-non-svg-1.xhtml green-box-ref.xhtml
-fails-if(styloVsGecko) == accesskey-entity-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == accesskey-entity-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-target-surgery-3.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == event-target-non-svg-1.xhtml green-box-ref.xhtml
+fails-if(styloVsGecko||stylo) == accesskey-entity-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == accesskey-entity-2.svg green-box-ref.svg
--- a/layout/reftests/svg/smil/reftest.list
+++ b/layout/reftests/svg/smil/reftest.list
@@ -70,19 +70,19 @@ include event/reftest.list
 == anim-discrete-to-4.svg          anim-standard-ref.svg
 
 == anim-indefinite-to-1.svg        anim-standard-ref.svg
 == anim-indefinite-to-2.svg        anim-standard-ref.svg
 == anim-indefinite-to-3.svg        anim-standard-ref.svg
 == anim-indefinite-to-4.svg        anim-standard-ref.svg
 
 fails-if(!styloVsGecko) == anim-fillcolor-1.svg      anim-standard-ref.svg # bug 436296
-fails-if(styloVsGecko) == anim-fillopacity-1none.svg anim-standard-ref.svg
-fails-if(styloVsGecko) == anim-fillopacity-1css.svg  anim-standard-ref.svg
-fails-if(styloVsGecko) == anim-fillopacity-1xml.svg  anim-standard-ref.svg
+fails-if(styloVsGecko||stylo) == anim-fillopacity-1none.svg anim-standard-ref.svg
+fails-if(styloVsGecko||stylo) == anim-fillopacity-1css.svg  anim-standard-ref.svg
+fails-if(styloVsGecko||stylo) == anim-fillopacity-1xml.svg  anim-standard-ref.svg
 
 fuzzy-if(skiaContent,1,3600) == anim-opacity-01.svg lime.svg
 
 == anim-height-done-1a.svg anim-standard-ref.svg
 == anim-height-done-1b.svg anim-standard-ref.svg
 == anim-height-done-2.svg lime.svg
 == anim-height-interp-1.svg anim-height-interp-1-ref.svg
 == anim-height-interp-2.svg anim-height-interp-2-ref.svg
@@ -151,44 +151,44 @@ skip-if(styloVsGecko) == anim-view-01.sv
 # animate some string attributes:
 == anim-filter-href-01.svg lime.svg
 == anim-gradient-href-01.svg lime.svg
 == anim-image-href-01.svg lime.svg
 == anim-pattern-href-01.svg lime.svg
 == anim-use-href-01.svg lime.svg
 
 # animate the class attribute
-fails-if(styloVsGecko) == anim-class-01.svg lime.svg
-fails-if(styloVsGecko) == anim-class-02.svg lime.svg
-fails-if(styloVsGecko) == anim-class-03.svg lime.svg
-fails-if(styloVsGecko) == anim-class-04.svg anim-class-04-ref.svg
+fails-if(styloVsGecko||stylo) == anim-class-01.svg lime.svg
+fails-if(styloVsGecko||stylo) == anim-class-02.svg lime.svg
+fails-if(styloVsGecko||stylo) == anim-class-03.svg lime.svg
+fails-if(styloVsGecko||stylo) == anim-class-04.svg anim-class-04-ref.svg
 
 # animate with some paint server values
-fails-if(styloVsGecko) == anim-paintserver-1.svg anim-paintserver-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-paintserver-1.svg anim-paintserver-1-ref.svg
 
 # animate attributes on text content children
 == anim-text-attr-01.svg anim-text-attr-01-ref.svg
 
 # animate where the base value is non-interpolatable but will be replaced anyway
-fails-if(styloVsGecko) == anim-fill-overpaintserver-1.svg lime.svg
-fails-if(styloVsGecko) == anim-fill-overpaintserver-2.svg lime.svg
+fails-if(styloVsGecko||stylo) == anim-fill-overpaintserver-1.svg lime.svg
+fails-if(styloVsGecko||stylo) == anim-fill-overpaintserver-2.svg lime.svg
 
 # animate where we fallback from 'additive' animation to non-additive
-fails-if(styloVsGecko) == anim-additive-fallback-1.svg anim-standard-ref.svg
+fails-if(styloVsGecko||stylo) == anim-additive-fallback-1.svg anim-standard-ref.svg
 
 == anim-remove-1.svg anim-standard-ref.svg
 == anim-remove-2.svg anim-standard-ref.svg
 == anim-remove-3.svg anim-standard-ref.svg
 == anim-remove-4.svg anim-standard-ref.svg
 == anim-remove-5.svg anim-standard-ref.svg
 == anim-remove-6.svg anim-standard-ref.svg
 == anim-remove-7.svg anim-standard-ref.svg
 == anim-remove-8css.svg anim-standard-ref.svg
 == anim-remove-8xml.svg anim-standard-ref.svg
-fails-if(styloVsGecko) == anim-remove-9.svg anim-standard-ref.svg
+fails-if(styloVsGecko||stylo) == anim-remove-9.svg anim-standard-ref.svg
 == anim-retarget-1.svg anim-standard-ref.svg
 == anim-retarget-2.svg anim-standard-ref.svg
 == anim-retarget-3.svg anim-standard-ref.svg
 == anim-retarget-4.svg anim-standard-ref.svg
 == anim-retarget-5.svg anim-standard-ref.svg
 == anim-retarget-6.svg anim-standard-ref.svg
 == anim-retarget-7.svg anim-standard-ref.svg
 == anim-retarget-8.svg anim-standard-ref.svg
@@ -243,45 +243,45 @@ fuzzy-if(cocoaWidget&&layersGPUAccelerat
 == api-sanity-1.svg lime.svg
 
 == freeze-applied-late-1.svg anim-standard-ref.svg
 == freeze-applied-late-2.svg anim-standard-ref.svg
 == freeze-applied-late-3.svg anim-standard-ref.svg
 == freeze-applied-late-4.svg anim-standard-ref.svg
 == frozen-to-anim-1.svg lime.svg
 
-fails-if(styloVsGecko) == inactivate-with-active-unchanged-1.svg anim-standard-ref.svg
-fails-if(styloVsGecko) == inactivate-with-active-unchanged-2.svg anim-standard-ref.svg
+fails-if(styloVsGecko||stylo) == inactivate-with-active-unchanged-1.svg anim-standard-ref.svg
+fails-if(styloVsGecko||stylo) == inactivate-with-active-unchanged-2.svg anim-standard-ref.svg
 
-fails-if(styloVsGecko) == mapped-attr-long-url-1.svg lime.svg
-fails-if(styloVsGecko) == mapped-attr-long-url-2.svg lime.svg
+fails-if(styloVsGecko||stylo) == mapped-attr-long-url-1.svg lime.svg
+fails-if(styloVsGecko||stylo) == mapped-attr-long-url-2.svg lime.svg
 
 == min-1.svg lime.svg
 
-fails-if(styloVsGecko) == smil-transitions-interaction-1a.svg lime.svg
-fails-if(styloVsGecko) == smil-transitions-interaction-1b.svg lime.svg
-fails-if(styloVsGecko) == smil-transitions-interaction-2a.svg lime.svg
-fails-if(styloVsGecko) == smil-transitions-interaction-2b.svg lime.svg
+fails-if(styloVsGecko||stylo) == smil-transitions-interaction-1a.svg lime.svg
+fails-if(styloVsGecko||stylo) == smil-transitions-interaction-1b.svg lime.svg
+fails-if(styloVsGecko||stylo) == smil-transitions-interaction-2a.svg lime.svg
+fails-if(styloVsGecko||stylo) == smil-transitions-interaction-2b.svg lime.svg
 == smil-transitions-interaction-3a.svg lime.svg
 == smil-transitions-interaction-3b.svg lime.svg
 == smil-transitions-interaction-4a.svg lime.svg
 == smil-transitions-interaction-4b.svg lime.svg
 
 # Test filtering of excessive times
 == filtered-instance-time-1.svg anim-standard-ref.svg
 
 # Test animation using defs element
-fails-if(styloVsGecko) == anim-defs-gradient-property.svg lime.svg
+fails-if(styloVsGecko||stylo) == anim-defs-gradient-property.svg lime.svg
 == anim-defs-gradient-attribute.svg lime.svg
-fails-if(styloVsGecko) == anim-defs-fill.svg lime.svg
+fails-if(styloVsGecko||stylo) == anim-defs-fill.svg lime.svg
 == anim-defs-width.svg lime.svg
 
 # Test animation that changes 'display' attribute
-fails-if(styloVsGecko) == anim-display.svg lime.svg
-fails-if(styloVsGecko) == anim-display-in-g-element.svg lime.svg
+fails-if(styloVsGecko||stylo) == anim-display.svg lime.svg
+fails-if(styloVsGecko||stylo) == anim-display-in-g-element.svg lime.svg
 
 # Test animation that change 'display' style value to 'none'
 == anim-change-display-none-for-ancestor-elem.html lime.html
 == anim-change-display-none-for-target-elem.html lime.html
 == anim-change-display-none-for-dynamically-appended-elem.html lime.html
-fails-if(styloVsGecko) == anim-change-display-block-for-dynamically-appended-elem.html anim-standard-ref.html
+fails-if(styloVsGecko||stylo) == anim-change-display-block-for-dynamically-appended-elem.html anim-standard-ref.html
 
 pref(layout.css.clip-path-shapes.enabled,true) fuzzy(63,146) == anim-clipPath-viewBox.svg anim-clipPath-viewBox-ref.svg
--- a/layout/reftests/svg/smil/repeat/reftest.list
+++ b/layout/reftests/svg/smil/repeat/reftest.list
@@ -1,3 +1,3 @@
 # Tests for repeat behaviour
-fails-if(styloVsGecko) == indefinite-repeat-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == indefinite-repeat-1.svg green-box-ref.svg
 == init-repeat-1.svg init-repeat-1-ref.svg
--- a/layout/reftests/svg/smil/restart/reftest.list
+++ b/layout/reftests/svg/smil/restart/reftest.list
@@ -1,8 +1,8 @@
 # Tests for restart behaviour
 == reset-1.svg reset-1-ref.svg
 == reset-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == reset-3.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == reset-3.svg green-box-ref.svg
 == reset-4.svg green-box-ref.svg
 # reset-5.svg is no longer valid and has been removed
-fails-if(styloVsGecko) == reset-6.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == reset-6.svg green-box-ref.svg
 == reset-7.svg green-box-ref.svg
--- a/layout/reftests/svg/smil/style/reftest.list
+++ b/layout/reftests/svg/smil/style/reftest.list
@@ -1,160 +1,160 @@
 # Tests related to SVG Animation (using SMIL) of CSS properties
 
 # XXXdholbert TODO: Test color animation with "color-interpolation: linearRGB"
 # (when it's implemented)
 
 # 'color' property, from/to/by with named colors & hex values
-fails-if(styloVsGecko) == anim-css-color-1-by-ident-hex.svg         anim-css-fill-1-ref.svg
-fails-if(styloVsGecko) == anim-css-color-1-from-by-hex-hex.svg      anim-css-fill-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-color-1-from-by-ident-hex.svg    anim-css-fill-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-color-1-from-to-hex-hex.svg      anim-css-fill-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-color-1-from-to-ident-ident.svg  anim-css-fill-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-color-1-to-ident-hex.svg         anim-css-fill-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-color-1-to-ident-ident.svg       anim-css-fill-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-color-1-by-ident-hex.svg         anim-css-fill-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-color-1-from-by-hex-hex.svg      anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-color-1-from-by-ident-hex.svg    anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-color-1-from-to-hex-hex.svg      anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-color-1-from-to-ident-ident.svg  anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-color-1-to-ident-hex.svg         anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-color-1-to-ident-ident.svg       anim-css-fill-1-ref.svg
 
 # 'color' property, paced calcMode
-fails-if(styloVsGecko) == anim-css-color-2-paced-rgb.svg            anim-css-fill-2-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-color-2-paced-rgb.svg            anim-css-fill-2-ref.svg
 
 # 'color' property, animating *by* a named color
-fuzzy-if(skiaContent,1,580) fails-if(styloVsGecko) == anim-css-color-3-by-ident-ident.svg       anim-css-fill-3-ref.svg
-fuzzy-if(skiaContent,1,580) fails-if(styloVsGecko) == anim-css-color-3-from-by-ident-ident.svg  anim-css-fill-3-ref.svg
-fuzzy-if(skiaContent,1,580) fails-if(styloVsGecko) == anim-css-color-3-from-by-rgb-ident.svg    anim-css-fill-3-ref.svg
+fuzzy-if(skiaContent,1,580) fails-if(styloVsGecko||stylo) == anim-css-color-3-by-ident-ident.svg       anim-css-fill-3-ref.svg
+fuzzy-if(skiaContent,1,580) fails-if(styloVsGecko||stylo) == anim-css-color-3-from-by-ident-ident.svg  anim-css-fill-3-ref.svg
+fuzzy-if(skiaContent,1,580) fails-if(styloVsGecko||stylo) == anim-css-color-3-from-by-rgb-ident.svg    anim-css-fill-3-ref.svg
 
 # 'fill' property, from/to/by with named colors & hex values
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-fill-1-by-ident-hex.svg         anim-css-fill-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-fill-1-from-by-hex-hex.svg      anim-css-fill-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-fill-1-from-by-ident-hex.svg    anim-css-fill-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-fill-1-from-to-hex-hex.svg      anim-css-fill-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-fill-1-from-to-ident-ident.svg  anim-css-fill-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-fill-1-to-ident-hex.svg         anim-css-fill-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-fill-1-to-ident-ident.svg       anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-fill-1-by-ident-hex.svg         anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-fill-1-from-by-hex-hex.svg      anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-fill-1-from-by-ident-hex.svg    anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-fill-1-from-to-hex-hex.svg      anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-fill-1-from-to-ident-ident.svg  anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-fill-1-to-ident-hex.svg         anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-fill-1-to-ident-ident.svg       anim-css-fill-1-ref.svg
 
 # 'fill' property, from/to/by, with 'currentColor' keyword
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-fill-1-by-ident-curcol.svg      anim-css-fill-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-fill-1-from-by-curcol-hex.svg   anim-css-fill-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-fill-1-from-by-hex-curcol.svg   anim-css-fill-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-fill-1-from-to-curcol-hex.svg   anim-css-fill-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-fill-1-from-to-hex-curcol.svg   anim-css-fill-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-fill-1-to-ident-curcol.svg      anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-fill-1-by-ident-curcol.svg      anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-fill-1-from-by-curcol-hex.svg   anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-fill-1-from-by-hex-curcol.svg   anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-fill-1-from-to-curcol-hex.svg   anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-fill-1-from-to-hex-curcol.svg   anim-css-fill-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-fill-1-to-ident-curcol.svg      anim-css-fill-1-ref.svg
 
 # 'fill' property, paced calcMode
-fails-if(styloVsGecko) == anim-css-fill-2-paced-rgb.svg            anim-css-fill-2-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-fill-2-paced-rgb.svg            anim-css-fill-2-ref.svg
 
 # 'fill' property, animating *by* a named color
-fuzzy-if(skiaContent,1,580) fails-if(styloVsGecko) == anim-css-fill-3-by-ident-ident.svg       anim-css-fill-3-ref.svg
-fuzzy-if(skiaContent,1,580) fails-if(styloVsGecko) == anim-css-fill-3-from-by-ident-ident.svg  anim-css-fill-3-ref.svg
-fuzzy-if(skiaContent,1,580) fails-if(styloVsGecko) == anim-css-fill-3-from-by-rgb-ident.svg    anim-css-fill-3-ref.svg
+fuzzy-if(skiaContent,1,580) fails-if(styloVsGecko||stylo) == anim-css-fill-3-by-ident-ident.svg       anim-css-fill-3-ref.svg
+fuzzy-if(skiaContent,1,580) fails-if(styloVsGecko||stylo) == anim-css-fill-3-from-by-ident-ident.svg  anim-css-fill-3-ref.svg
+fuzzy-if(skiaContent,1,580) fails-if(styloVsGecko||stylo) == anim-css-fill-3-from-by-rgb-ident.svg    anim-css-fill-3-ref.svg
 
 # check handling of overflowing color values
 # NOTE: The second test fails because we compute "from + by" as the animation
 # end-point, and we clamp that final color value (due to bug 515919) and use
 # the clamped value for interpolation.  That's earlier than the SVG spec wants
 # us to clamp -- we're only supposed to clamp *final presentation values*.
 # (Reference: SVG 1.1 Appendix F.4)
-fails-if(styloVsGecko) == anim-css-fill-overflow-1-by.svg       anim-css-fill-overflow-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-fill-overflow-1-by.svg       anim-css-fill-overflow-1-ref.svg
 fails == anim-css-fill-overflow-1-from-by.svg anim-css-fill-overflow-1-ref.svg
 
 # 'fill-opacity' property
-fuzzy-if(skiaContent,1,885) fails-if(styloVsGecko) == anim-css-fillopacity-1-by.svg            anim-css-fillopacity-1-ref.svg
-fuzzy-if(skiaContent,1,210) fails-if(styloVsGecko) == anim-css-fillopacity-1-from-by.svg       anim-css-fillopacity-1-ref.svg
-fails-if(styloVsGecko) == anim-css-fillopacity-1-from-to.svg       anim-css-fillopacity-1-ref.svg
-fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko) == anim-css-fillopacity-1-to.svg            anim-css-fillopacity-1-ref.svg
-fails-if(styloVsGecko) == anim-css-fillopacity-2-paced.svg         anim-css-fillopacity-2-ref.svg
+fuzzy-if(skiaContent,1,885) fails-if(styloVsGecko||stylo) == anim-css-fillopacity-1-by.svg            anim-css-fillopacity-1-ref.svg
+fuzzy-if(skiaContent,1,210) fails-if(styloVsGecko||stylo) == anim-css-fillopacity-1-from-by.svg       anim-css-fillopacity-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-fillopacity-1-from-to.svg       anim-css-fillopacity-1-ref.svg
+fuzzy-if(skiaContent,1,550) fails-if(styloVsGecko||stylo) == anim-css-fillopacity-1-to.svg            anim-css-fillopacity-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-fillopacity-2-paced.svg         anim-css-fillopacity-2-ref.svg
 fails == anim-css-fillopacity-3-clamp-big.svg     anim-css-fillopacity-3-ref.svg # bug 501188
-fuzzy-if(skiaContent,1,365) fails-if(styloVsGecko) == anim-css-fillopacity-3-clamp-small.svg   anim-css-fillopacity-3-ref.svg
+fuzzy-if(skiaContent,1,365) fails-if(styloVsGecko||stylo) == anim-css-fillopacity-3-clamp-small.svg   anim-css-fillopacity-3-ref.svg
 
 # 'font' shorthand property
-fails-if(styloVsGecko) == anim-css-font-1.svg  anim-css-font-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-font-1.svg  anim-css-font-1-ref.svg
 
 # 'font-size' property, from/by/to with pixel values only
-fails-if(styloVsGecko) == anim-css-fontsize-1-from-by-px-px.svg    anim-css-fontsize-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-fontsize-1-from-by-px-px.svg    anim-css-fontsize-1-ref.svg
 == anim-css-fontsize-1-from-to-px-px.svg    anim-css-fontsize-1-ref.svg
 
 # 'font-size' property (accepts unitless values)
 == anim-css-fontsize-1-from-to-no-no.svg    anim-css-fontsize-1-ref.svg
 == anim-css-fontsize-1-from-to-no-px.svg    anim-css-fontsize-1-ref.svg
 == anim-css-fontsize-1-from-to-px-no.svg    anim-css-fontsize-1-ref.svg
 
 # 'font-size' mapped attribute (accepts unitless values)
 == anim-mapped-fontsize-1-from-to-no-no.svg anim-css-fontsize-1-ref.svg
 == anim-mapped-fontsize-1-from-to-no-px.svg anim-css-fontsize-1-ref.svg
 == anim-mapped-fontsize-1-from-to-px-no.svg anim-css-fontsize-1-ref.svg
 
 # 'font-size' property, from/by/to with percent values
-fails-if(styloVsGecko) == anim-css-fontsize-1-from-by-pct-pct.svg  anim-css-fontsize-1-ref.svg
-fails-if(styloVsGecko) == anim-css-fontsize-1-from-by-pct-px.svg   anim-css-fontsize-1-ref.svg
-fails-if(styloVsGecko) == anim-css-fontsize-1-from-by-px-pct.svg   anim-css-fontsize-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-fontsize-1-from-by-pct-pct.svg  anim-css-fontsize-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-fontsize-1-from-by-pct-px.svg   anim-css-fontsize-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-fontsize-1-from-by-px-pct.svg   anim-css-fontsize-1-ref.svg
 == anim-css-fontsize-1-from-to-pct-pct.svg  anim-css-fontsize-1-ref.svg
 == anim-css-fontsize-1-from-to-pct-px.svg   anim-css-fontsize-1-ref.svg
 == anim-css-fontsize-1-from-to-px-pct.svg   anim-css-fontsize-1-ref.svg
 
 # 'font-size' property, with negative addition
-fails-if(styloVsGecko) == anim-css-fontsize-2-from-by-px-px.svg    anim-css-fontsize-2-ref.svg
-fails-if(styloVsGecko) == anim-css-fontsize-2-from-by-px-em.svg    anim-css-fontsize-2-ref.svg
-fails-if(styloVsGecko) == anim-css-fontsize-2-from-by-em-em.svg    anim-css-fontsize-2-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-fontsize-2-from-by-px-px.svg    anim-css-fontsize-2-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-fontsize-2-from-by-px-em.svg    anim-css-fontsize-2-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-fontsize-2-from-by-em-em.svg    anim-css-fontsize-2-ref.svg
 
 # 'stroke-dasharray' property, from/to with pixel values only
 skip-if(!styloVsGecko) == anim-css-strokedasharray-1.svg anim-css-strokedasharray-1-ref.svg
 
 # 'stroke-width' property, from/by/to with pixel values only
-fails-if(styloVsGecko) == anim-css-strokewidth-1-by-px-px.svg        anim-css-strokewidth-1-ref.svg
-fails-if(styloVsGecko) == anim-css-strokewidth-1-from-by-px-px.svg   anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-by-px-px.svg        anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-from-by-px-px.svg   anim-css-strokewidth-1-ref.svg
 == anim-css-strokewidth-1-from-to-px-px.svg   anim-css-strokewidth-1-ref.svg
-fails-if(styloVsGecko) == anim-css-strokewidth-1-to-px-px.svg        anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-to-px-px.svg        anim-css-strokewidth-1-ref.svg
 
 # 'stroke-width' property, from/by/to with unitless values only
-fails-if(styloVsGecko) == anim-css-strokewidth-1-by-no-no.svg        anim-css-strokewidth-1-ref.svg
-fails-if(styloVsGecko) == anim-css-strokewidth-1-from-by-no-no.svg   anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-by-no-no.svg        anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-from-by-no-no.svg   anim-css-strokewidth-1-ref.svg
 == anim-css-strokewidth-1-from-to-no-no.svg   anim-css-strokewidth-1-ref.svg
-fails-if(styloVsGecko) == anim-css-strokewidth-1-to-no-no.svg        anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-to-no-no.svg        anim-css-strokewidth-1-ref.svg
 
 # 'stroke-width' property, from/by/to with percent values
 # XXXdholbert the mixed pct + px tests fail right now, because we need calc()
 # in order to interpolate between pct and non-pct values, and we don't yet
 # support calc() for stroke-width & other SVG-specific properties (Bug 594933).
-fails-if(styloVsGecko) == anim-css-strokewidth-1-by-pct-pct.svg      anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-by-pct-pct.svg      anim-css-strokewidth-1-ref.svg
 fails == anim-css-strokewidth-1-by-pct-px.svg       anim-css-strokewidth-1-ref.svg
 fails == anim-css-strokewidth-1-by-px-pct.svg       anim-css-strokewidth-1-ref.svg
-fails-if(styloVsGecko) == anim-css-strokewidth-1-from-by-pct-pct.svg anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-from-by-pct-pct.svg anim-css-strokewidth-1-ref.svg
 fails-if(!styloVsGecko) == anim-css-strokewidth-1-from-by-pct-px.svg  anim-css-strokewidth-1-ref.svg
 fails-if(!styloVsGecko) == anim-css-strokewidth-1-from-by-px-pct.svg  anim-css-strokewidth-1-ref.svg
 == anim-css-strokewidth-1-from-to-pct-pct.svg anim-css-strokewidth-1-ref.svg
 fails-if(!styloVsGecko) fails-if(styloVsGecko) == anim-css-strokewidth-1-from-to-pct-px.svg  anim-css-strokewidth-1-ref.svg
 fails-if(!styloVsGecko) fails-if(styloVsGecko) == anim-css-strokewidth-1-from-to-px-pct.svg  anim-css-strokewidth-1-ref.svg
-fails-if(styloVsGecko) == anim-css-strokewidth-1-to-pct-pct.svg      anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-to-pct-pct.svg      anim-css-strokewidth-1-ref.svg
 fails-if(!styloVsGecko) == anim-css-strokewidth-1-to-pct-px.svg       anim-css-strokewidth-1-ref.svg
 fails-if(!styloVsGecko) == anim-css-strokewidth-1-to-px-pct.svg       anim-css-strokewidth-1-ref.svg
 
 # 'stroke-width' property, from/by/to with em values
-fails-if(styloVsGecko) == anim-css-strokewidth-1-by-px-em.svg        anim-css-strokewidth-1-ref.svg
-fails-if(styloVsGecko) == anim-css-strokewidth-1-by-em-em.svg        anim-css-strokewidth-1-ref.svg
-fails-if(styloVsGecko) == anim-css-strokewidth-1-by-em-px.svg        anim-css-strokewidth-1-ref.svg
-fails-if(styloVsGecko) == anim-css-strokewidth-1-from-by-px-em.svg   anim-css-strokewidth-1-ref.svg
-fails-if(styloVsGecko) == anim-css-strokewidth-1-from-by-em-em.svg   anim-css-strokewidth-1-ref.svg
-fails-if(styloVsGecko) == anim-css-strokewidth-1-from-by-em-px.svg   anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-by-px-em.svg        anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-by-em-em.svg        anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-by-em-px.svg        anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-from-by-px-em.svg   anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-from-by-em-em.svg   anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-from-by-em-px.svg   anim-css-strokewidth-1-ref.svg
 == anim-css-strokewidth-1-from-to-px-em.svg   anim-css-strokewidth-1-ref.svg
 == anim-css-strokewidth-1-from-to-em-em.svg   anim-css-strokewidth-1-ref.svg
 == anim-css-strokewidth-1-from-to-em-px.svg   anim-css-strokewidth-1-ref.svg
-fails-if(styloVsGecko) == anim-css-strokewidth-1-to-px-em.svg        anim-css-strokewidth-1-ref.svg
-fails-if(styloVsGecko) == anim-css-strokewidth-1-to-em-em.svg        anim-css-strokewidth-1-ref.svg
-fails-if(styloVsGecko) == anim-css-strokewidth-1-to-em-px.svg        anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-to-px-em.svg        anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-to-em-em.svg        anim-css-strokewidth-1-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-1-to-em-px.svg        anim-css-strokewidth-1-ref.svg
 
 # 'stroke-width' property, values-array & paced calc-mode support
 == anim-css-strokewidth-2-values-em-em.svg    anim-css-strokewidth-2-ref.svg
 == anim-css-strokewidth-2-values-em-px.svg    anim-css-strokewidth-2-ref.svg
 == anim-css-strokewidth-2-values-px-em.svg    anim-css-strokewidth-2-ref.svg
 fuzzy-if(skiaContent,1,360) == anim-css-strokewidth-2-values-px-px.svg    anim-css-strokewidth-2-ref.svg
 == anim-css-strokewidth-3-paced.svg           anim-css-strokewidth-3-ref.svg
 
 # 'stroke-width' property, negative addition
-fails-if(styloVsGecko) == anim-css-strokewidth-4-from-by-px-px.svg   anim-css-strokewidth-4-ref.svg
-fails-if(styloVsGecko) == anim-css-strokewidth-4-from-by-px-em.svg   anim-css-strokewidth-4-ref.svg
-fails-if(styloVsGecko) == anim-css-strokewidth-4-from-by-em-em.svg   anim-css-strokewidth-4-ref.svg
-fuzzy-if(skiaContent,1,170) fails-if(styloVsGecko) == anim-css-strokewidth-4-from-by-no-no.svg   anim-css-strokewidth-4-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-4-from-by-px-px.svg   anim-css-strokewidth-4-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-4-from-by-px-em.svg   anim-css-strokewidth-4-ref.svg
+fails-if(styloVsGecko||stylo) == anim-css-strokewidth-4-from-by-em-em.svg   anim-css-strokewidth-4-ref.svg
+fuzzy-if(skiaContent,1,170) fails-if(styloVsGecko||stylo) == anim-css-strokewidth-4-from-by-no-no.svg   anim-css-strokewidth-4-ref.svg
 
 # check correct handling of "!important" values
 == important-set-1.svg  anim-standard-ref.svg
 == important-set-2.svg  anim-standard-ref.svg
 
 # check namespaced attribute
 == namespaced-property-1.svg  anim-standard-ref.svg
--- a/layout/reftests/svg/smil/syncbase/reftest.list
+++ b/layout/reftests/svg/smil/syncbase/reftest.list
@@ -1,99 +1,99 @@
 # Tests related to SVG Animation (using SMIL) that use syncbase timing.
 
 # New intervals
-fails-if(styloVsGecko) == new-interval-simple-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-simple-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-negative-offset-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-negative-offset-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-negative-offset-3.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-negative-offset-4.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-negative-syncbase-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-restart-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-restart-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-restart-3.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-early-end-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-early-end-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-early-end-3.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-simple-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-simple-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-negative-offset-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-negative-offset-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-negative-offset-3.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-negative-offset-4.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-negative-syncbase-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-restart-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-restart-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-restart-3.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-early-end-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-early-end-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-early-end-3.svg green-box-ref.svg
 == new-interval-early-end-4.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-early-end-5.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-early-end-6.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-early-end-5.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-early-end-6.svg green-box-ref.svg
 == new-interval-early-end-7.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-doubly-dependent-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-doubly-dependent-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-doubly-dependent-3.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-triply-dependent-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-triply-dependent-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-end-negative-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-end-negative-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-end-dep-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-chain-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-chain-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-sample-order-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == new-interval-freeze-begin-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-doubly-dependent-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-doubly-dependent-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-doubly-dependent-3.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-triply-dependent-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-triply-dependent-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-end-negative-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-end-negative-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-end-dep-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-chain-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-chain-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-sample-order-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == new-interval-freeze-begin-1.svg green-box-ref.svg
 
 # Changing intervals
-fails-if(styloVsGecko) == changed-interval-simple-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == changed-interval-simple-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == changed-interval-simple-3.svg green-box-ref.svg
-fails-if(styloVsGecko) == changed-interval-simple-4.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == changed-interval-simple-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == changed-interval-simple-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == changed-interval-simple-3.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == changed-interval-simple-4.svg green-box-ref.svg
 == changed-interval-simple-5.svg green-box-ref.svg
-fails-if(styloVsGecko) == changed-interval-resolved-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == changed-interval-resolved-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == changed-interval-sort-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == changed-interval-change-spec-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == changed-interval-change-spec-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == changed-interval-change-spec-3.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == changed-interval-resolved-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == changed-interval-resolved-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == changed-interval-sort-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == changed-interval-change-spec-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == changed-interval-change-spec-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == changed-interval-change-spec-3.svg green-box-ref.svg
 == changed-interval-change-spec-4.svg green-box-ref.svg
 
 # Deleted intervals
 == deleted-interval-simple-1.svg green-box-ref.svg
 == deleted-interval-simple-2.svg green-box-ref.svg
 == deleted-interval-simple-3.svg green-box-ref.svg
 == deleted-interval-simple-4.svg green-box-ref.svg
 == deleted-interval-simple-5.svg green-box-ref.svg
 
 # Trimmed intervals
-fails-if(styloVsGecko) == trimmed-interval-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == trimmed-interval-1.svg green-box-ref.svg
 
 # Cyclic dependencies
-fails-if(styloVsGecko) == cycle-ok-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == cycle-ok-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == cycle-ok-3.svg green-box-ref.svg
-fails-if(styloVsGecko) == cycle-ok-4.svg green-box-ref.svg
-fails-if(styloVsGecko) == cycle-ok-5.svg green-box-ref.svg
-fails-if(styloVsGecko) == cycle-self-ref-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == cycle-self-ref-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == cycle-self-ref-3.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == cycle-ok-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == cycle-ok-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == cycle-ok-3.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == cycle-ok-4.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == cycle-ok-5.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == cycle-self-ref-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == cycle-self-ref-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == cycle-self-ref-3.svg green-box-ref.svg
 == cycle-self-ref-4.svg green-box-ref.svg
-fails-if(styloVsGecko) == cycle-self-ref-5.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == cycle-self-ref-5.svg green-box-ref.svg
 == cycle-invalid-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == cycle-invalid-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == cycle-invalid-3.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == cycle-invalid-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == cycle-invalid-3.svg green-box-ref.svg
 == cycle-invalid-4.svg green-box-ref.svg
-fails-if(styloVsGecko) == cycle-change-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == cycle-change-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == cycle-change-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == cycle-change-2.svg green-box-ref.svg
 == cycle-delete-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == cycle-recursion-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == cycle-recursion-1.svg green-box-ref.svg
 == cycle-recursion-2.svg green-box-ref.svg
 
 # Animation sandwich priority
-fails-if(styloVsGecko) == sandwich-priority-1.svg green-box-ref.svg
-fails-if(styloVsGecko) == sandwich-priority-2.svg green-box-ref.svg
-fails-if(styloVsGecko) == sandwich-priority-3.svg green-box-ref.svg
-fails-if(styloVsGecko) == sandwich-priority-4.svg green-box-ref.svg
-fails-if(styloVsGecko) == sandwich-priority-5.svg green-box-ref.svg
-fails-if(styloVsGecko) == sandwich-priority-6.svg green-box-ref.svg
-fails-if(styloVsGecko) == sandwich-priority-7.svg green-box-ref.svg
-fails-if(styloVsGecko) == sandwich-priority-8.svg green-box-ref.svg
-fails-if(styloVsGecko) == sandwich-priority-9.svg green-box-ref.svg
-fails-if(styloVsGecko) == sandwich-priority-10.svg green-box-ref.svg
-fails-if(styloVsGecko) == sandwich-priority-11.svg green-box-ref.svg
-fails-if(styloVsGecko) == sandwich-priority-12.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == sandwich-priority-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == sandwich-priority-2.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == sandwich-priority-3.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == sandwich-priority-4.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == sandwich-priority-5.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == sandwich-priority-6.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == sandwich-priority-7.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == sandwich-priority-8.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == sandwich-priority-9.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == sandwich-priority-10.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == sandwich-priority-11.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == sandwich-priority-12.svg green-box-ref.svg
 
 # Cross-time container dependencies
-fails-if(styloVsGecko) == cross-container-1.xhtml green-box-ref.xhtml
+fails-if(styloVsGecko||stylo) == cross-container-1.xhtml green-box-ref.xhtml
 == cross-container-2.xhtml green-box-ref.xhtml
-fails-if(styloVsGecko) == cross-container-3.xhtml green-box-ref.xhtml
+fails-if(styloVsGecko||stylo) == cross-container-3.xhtml green-box-ref.xhtml
 
 # Filtering
-fails-if(styloVsGecko) == filtered-interval-1.svg green-box-ref.svg
+fails-if(styloVsGecko||stylo) == filtered-interval-1.svg green-box-ref.svg
--- a/layout/reftests/svg/text/reftest.list
+++ b/layout/reftests/svg/text/reftest.list
@@ -142,18 +142,18 @@ fuzzy-if(/^Windows\x20NT\x2010\.0/.test(
 == ignore-margin.svg ignore-prop-ref.svg
 == ignore-padding.svg ignore-prop-ref.svg
 == ignore-vertical-align.svg ignore-vertical-align-ref.svg
 == ignore-overflow-scroll.svg ignore-prop-ref.svg
 == ignore-text-align.svg ignore-prop-ref.svg
 == ignore-text-align-2.svg ignore-text-align-2-ref.svg
 
 # pseudo-elements
-fails-if(styloVsGecko) == pseudo-first-line.svg pseudo-first-line-ref.svg
-fails-if(styloVsGecko) == pseudo-first-line-2.svg pseudo-first-line-2-ref.svg
+fails-if(styloVsGecko||stylo) == pseudo-first-line.svg pseudo-first-line-ref.svg
+fails-if(styloVsGecko||stylo) == pseudo-first-line-2.svg pseudo-first-line-2-ref.svg
 == pseudo-first-letter.svg pseudo-first-letter-ref.svg
 == pseudo-first-letter-2.svg pseudo-first-letter-2-ref.svg
 == ignore-before-after.svg ignore-prop-ref.svg
 
 # invalid child nodes
 == ignore-invalid-child.svg ignore-invalid-child-ref.svg
 == ignore-invalid-child-2.svg ignore-invalid-child-2-ref.svg
 
--- a/layout/reftests/tab-size/reftest.list
+++ b/layout/reftests/tab-size/reftest.list
@@ -4,9 +4,9 @@
 == tab-size-4-span.html       spaces-4.html
 == tab-size-4-spanoffset.html spaces-4-offset.html
 == tab-size-4-multiple.html   spaces-4-multiple.html
 == tab-size-1.html            spaces-1.html
 == tab-size-0.html            spaces-0.html
 == tab-size-negative.html     tab-size-initial.html
 == tab-size-change-1a.html     tab-size-change-1-ref.html
 == tab-size-change-1b.html     tab-size-change-1-ref.html
-fuzzy-if(winWidget,100,1000) fails-if(styloVsGecko) == tab-size-length.html       tab-size-length-ref.html
+fuzzy-if(winWidget,100,1000) fails-if(styloVsGecko||stylo) == tab-size-length.html       tab-size-length-ref.html
--- a/layout/reftests/text-overflow/reftest.list
+++ b/layout/reftests/text-overflow/reftest.list
@@ -1,19 +1,19 @@
 == ellipsis-font-fallback.html ellipsis-font-fallback-ref.html
 == line-clipping.html line-clipping-ref.html
 fuzzy-if(Android,16,244) HTTP(..) == marker-basic.html marker-basic-ref.html  # Bug 1128229
-HTTP(..) == marker-string.html marker-string-ref.html
+fails-if(stylo) HTTP(..) == marker-string.html marker-string-ref.html
 skip-if(Android) HTTP(..) == bidi-simple.html bidi-simple-ref.html # Fails on Android due to anti-aliasing
 skip-if(!gtkWidget) fuzzy-if(gtkWidget,2,289) HTTP(..) == bidi-simple-scrolled.html bidi-simple-scrolled-ref.html # Fails on Windows and OSX due to anti-aliasing
 fuzzy-if(Android,24,4000) fuzzy-if(cocoaWidget,1,40) fuzzy-if(asyncPan&&!layersGPUAccelerated,140,1836) HTTP(..) == scroll-rounding.html scroll-rounding-ref.html # bug 760264
 fuzzy(2,453) fuzzy-if(skiaContent,9,2100) fails-if(gtkWidget) HTTP(..) == anonymous-block.html anonymous-block-ref.html # gtkWidget:bug 1309103
 HTTP(..) == false-marker-overlap.html false-marker-overlap-ref.html
 HTTP(..) == visibility-hidden.html visibility-hidden-ref.html
-fuzzy-if(asyncPan&&!layersGPUAccelerated,102,1724) fuzzy-if(gtkWidget,10,8) HTTP(..) == block-padding.html block-padding-ref.html
+fuzzy-if(asyncPan&&!layersGPUAccelerated,102,1724) fuzzy-if(gtkWidget,10,8) skip-if(stylo) HTTP(..) == block-padding.html block-padding-ref.html
 HTTP(..) == quirks-decorations.html quirks-decorations-ref.html
 HTTP(..) == quirks-line-height.html quirks-line-height-ref.html
 HTTP(..) == standards-decorations.html standards-decorations-ref.html
 HTTP(..) == standards-line-height.html standards-line-height-ref.html
 fuzzy-if(skiaContent,1,4200) HTTP(..) == selection.html selection-ref.html
 HTTP(..) == marker-shadow.html marker-shadow-ref.html
 == aligned-baseline.html aligned-baseline-ref.html
 skip-if(Android) fuzzy-if(skiaContent,1,5) == clipped-elements.html clipped-elements-ref.html
--- a/layout/reftests/text/reftest.list
+++ b/layout/reftests/text/reftest.list
@@ -321,17 +321,17 @@ HTTP(..) == graphite-surrogate-selection
 == hyphenation-control-2.html hyphenation-control-2-ref.html
 == hyphenation-control-3.html hyphenation-control-3-ref.html
 
 # osx-font-smoothing - with and without subpixel AA, only under OSX
 fails-if(!cocoaWidget&&!styloVsGecko) != osx-font-smoothing.html osx-font-smoothing-ref.html
 fails-if(!cocoaWidget&&!styloVsGecko) != osx-font-smoothing-2.html osx-font-smoothing-2-notref.html
 == osx-font-smoothing-2.html osx-font-smoothing-2-ref.html
 
-pref(layout.css.text-align-unsafe-value.enabled,true) fails-if(styloVsGecko) == text-align-unsafe.html text-align-unsafe-ref.html
+pref(layout.css.text-align-unsafe-value.enabled,true) fails-if(styloVsGecko||stylo) == text-align-unsafe.html text-align-unsafe-ref.html
 
 # stray control chars should be visible by default, bug 1099557
 fails-if(styloVsGecko) != control-chars-01a.html control-chars-01-notref.html
 fails-if(styloVsGecko) != control-chars-01b.html control-chars-01-notref.html
 fails-if(styloVsGecko) != control-chars-01c.html control-chars-01-notref.html
 fails-if(styloVsGecko) != control-chars-01d.html control-chars-01-notref.html
 != control-chars-02.html control-chars-02-notref.html
 == control-chars-03a.html control-chars-03-ref.html
--- a/layout/reftests/transform/reftest.list
+++ b/layout/reftests/transform/reftest.list
@@ -135,9 +135,9 @@ pref(svg.transform-box.enabled,true) == 
 == transform-origin-svg-2a.svg transform-origin-svg-2-ref.svg
 == transform-origin-svg-2b.svg transform-origin-svg-2-ref.svg
 # Bug 1122526
 == animate-layer-scale-inherit-1.html animate-layer-scale-inherit-1-ref.html
 == animate-layer-scale-inherit-2.html animate-layer-scale-inherit-2-ref.html
 == animate-layer-scale-inherit-3.html animate-layer-scale-inherit-1-ref.html
 # Bug 1301500
 == dynamic-add-without-change-cb-1.html dynamic-add-without-change-cb-1-ref.html
-fuzzy-if(d2d,1,5) fuzzy-if(skiaContent,22,180) skip-if(stylo) == table-overflowed-by-animation.html table-overflowed-by-animation-ref.html # bug 1365851 for stylo
+fuzzy-if(d2d,1,5) fuzzy-if(skiaContent,22,180) skip-if(styloVsGecko||stylo) == table-overflowed-by-animation.html table-overflowed-by-animation-ref.html
--- a/layout/reftests/w3c-css/failures.list
+++ b/layout/reftests/w3c-css/failures.list
@@ -40,18 +40,16 @@ skip css-values-3/vh_not_refreshing_on_c
 skip css-values-3/vh_not_refreshing_on_chrome_iframe.html
 
 # because of support files (in iframe subdir) not being copied (bug 1256580)
 skip css-values-3/vh-support-transform-origin.html
 skip css-values-3/vh-support-transform-translate.html
 
 css-values-3/calc-in-calc.html
 fails-if(stylo) css-values-3/vh-support-atviewport.html
-# bug 1367947
-fails-if(stylo) css-values-3/vh-em-inherit.html
 
 #### CSS Writing Modes 3 #############################################
 
 # Fuzzy
 fuzzy-if(OSX||winWidget,255,480)  css-writing-modes-3/abs-pos-non-replaced-v??-???.xht
 fuzzy-if(OSX||winWidget,93,600)   css-writing-modes-3/baseline-inline-non-replaced-00?.xht
 fuzzy-if(OSX||winWidget,213,1540) css-writing-modes-3/block-flow-direction-???-0??.xht
 fuzzy-if(OSX,255,200)  css-writing-modes-3/box-offsets-rel-pos-vlr-005.xht
--- a/layout/reftests/w3c-css/received/reftest.list
+++ b/layout/reftests/w3c-css/received/reftest.list
@@ -214,30 +214,30 @@ fails-if(!styloVsGecko) == css-values-3/
 == css-values-3/attr-length-invalid-fallback.html css-values-3/reference/200-200-green.html
 fails-if(!styloVsGecko) == css-values-3/attr-length-valid-zero-nofallback.html css-values-3/reference/200-200-green.html
 fails-if(!styloVsGecko) == css-values-3/attr-length-valid-zero.html css-values-3/reference/200-200-green.html
 fails-if(!styloVsGecko) == css-values-3/attr-length-valid.html css-values-3/reference/200-200-green.html
 fails-if(!styloVsGecko) == css-values-3/attr-px-invalid-cast.html css-values-3/reference/200-200-green.html
 == css-values-3/attr-px-invalid-fallback.html css-values-3/reference/200-200-green.html
 fails-if(!styloVsGecko) == css-values-3/attr-px-valid.html css-values-3/reference/200-200-green.html
 == css-values-3/calc-in-calc.html css-values-3/reference/all-green.html
-fails == css-values-3/calc-in-media-queries-001.html css-values-3/reference/all-green.html
-fails == css-values-3/calc-in-media-queries-002.html css-values-3/reference/all-green.html
+fails-if(!stylo) == css-values-3/calc-in-media-queries-001.html css-values-3/reference/all-green.html
+fails-if(!stylo) == css-values-3/calc-in-media-queries-002.html css-values-3/reference/all-green.html
 == css-values-3/calc-invalid-range-clamping.html css-values-3/reference/200-200-green.html
 == css-values-3/calc-parenthesis-stack.html css-values-3/reference/all-green.html
 fuzzy-if(OSX,40,6) == css-values-3/ch-unit-001.html css-values-3/reference/ch-unit-001-ref.html
 == css-values-3/initial-background-color.html css-values-3/reference/all-green.html
 == css-values-3/vh-calc-support-pct.html css-values-3/reference/all-green.html
 == css-values-3/vh-calc-support.html css-values-3/reference/all-green.html
-fails-if(stylo) == css-values-3/vh-em-inherit.html css-values-3/reference/all-green.html
+== css-values-3/vh-em-inherit.html css-values-3/reference/all-green.html
 == css-values-3/vh-inherit.html css-values-3/reference/all-green.html
 == css-values-3/vh-interpolate-pct.html css-values-3/reference/all-green.html
 == css-values-3/vh-interpolate-px.html css-values-3/reference/all-green.html
 == css-values-3/vh-interpolate-vh.html css-values-3/reference/all-green.html
-fails-if(styloVsGecko) == css-values-3/vh-support-atviewport.html css-values-3/reference/all-green.html
+fails-if(styloVsGecko||stylo) == css-values-3/vh-support-atviewport.html css-values-3/reference/all-green.html
 == css-values-3/vh-support-margin.html css-values-3/reference/all-green.html
 skip == css-values-3/vh-support-transform-origin.html css-values-3/reference/all-green.html
 skip == css-values-3/vh-support-transform-translate.html css-values-3/reference/all-green.html
 == css-values-3/vh-support.html css-values-3/reference/all-green.html
 == css-values-3/vh-zero-support.html css-values-3/reference/all-green.html
 skip == css-values-3/vh_not_refreshing_on_chrome.html css-values-3/reference/vh_not_refreshing_on_chrome-ref.html
 skip == css-values-3/vh_not_refreshing_on_chrome_iframe.html css-values-3/reference/vh_not_refreshing_on_chrome-ref.html
 == css-writing-modes-3/abs-pos-non-replaced-icb-vlr-003.xht css21/reference/ref-filled-green-100px-square.xht
@@ -1027,16 +1027,16 @@ fuzzy-if(OSX||winWidget,153,612) == css-
 fuzzy-if(OSX||winWidget,153,612) == css-writing-modes-3/writing-mode-vertical-rl-003.htm css-writing-modes-3/writing-mode-vertical-rl-003-ref.htm
 needs-focus == selectors-4/focus-within-001.html selectors-4/focus-within-001-ref.html
 needs-focus == selectors-4/focus-within-002.html selectors-4/focus-within-001-ref.html
 needs-focus == selectors-4/focus-within-003.html selectors-4/focus-within-001-ref.html
 needs-focus == selectors-4/focus-within-004.html selectors-4/focus-within-001-ref.html
 needs-focus == selectors-4/focus-within-005.html selectors-4/focus-within-001-ref.html
 needs-focus == selectors-4/focus-within-006.html selectors-4/focus-within-001-ref.html
 fails-if(!styloVsGecko) needs-focus == selectors-4/focus-within-shadow-001.html selectors-4/focus-within-shadow-001-ref.html
-pref(dom.webcomponents.enabled,true) needs-focus skip-if(styloVsGecko) == selectors-4/focus-within-shadow-002.html selectors-4/focus-within-shadow-001-ref.html
-pref(dom.webcomponents.enabled,true) needs-focus skip-if(styloVsGecko) == selectors-4/focus-within-shadow-003.html selectors-4/focus-within-shadow-001-ref.html
-pref(dom.webcomponents.enabled,true) needs-focus skip-if(styloVsGecko) == selectors-4/focus-within-shadow-004.html selectors-4/focus-within-shadow-001-ref.html
-pref(dom.webcomponents.enabled,true) needs-focus skip-if(styloVsGecko) == selectors-4/focus-within-shadow-005.html selectors-4/focus-within-shadow-001-ref.html
+pref(dom.webcomponents.enabled,true) needs-focus skip-if(styloVsGecko||stylo) == selectors-4/focus-within-shadow-002.html selectors-4/focus-within-shadow-001-ref.html
+pref(dom.webcomponents.enabled,true) needs-focus skip-if(styloVsGecko||stylo) == selectors-4/focus-within-shadow-003.html selectors-4/focus-within-shadow-001-ref.html
+pref(dom.webcomponents.enabled,true) needs-focus skip-if(styloVsGecko||stylo) == selectors-4/focus-within-shadow-004.html selectors-4/focus-within-shadow-001-ref.html
+pref(dom.webcomponents.enabled,true) needs-focus skip-if(styloVsGecko||stylo) == selectors-4/focus-within-shadow-005.html selectors-4/focus-within-shadow-001-ref.html
 == selectors-4/of-type-selectors.xhtml selectors-4/of-type-selectors-ref.xhtml
 == selectors-4/selector-required.html selectors-4/selector-required-ref.html
 == selectors-4/selectors-dir-selector-ltr-001.html selectors-4/selectors-dir-selector-ref.html
 == selectors-4/selectors-dir-selector-rtl-001.html selectors-4/selectors-dir-selector-ref.html
--- a/layout/reftests/w3c-css/submitted/align3/reftest.list
+++ b/layout/reftests/w3c-css/submitted/align3/reftest.list
@@ -45,33 +45,33 @@
 == flex-abspos-staticpos-justify-content-vertWM-001.html flex-abspos-staticpos-justify-content-vertWM-001-ref.html
 == flex-abspos-staticpos-justify-content-vertWM-002.html flex-abspos-staticpos-justify-content-vertWM-002-ref.html
 
 == flex-abspos-staticpos-justify-self-001.html flex-abspos-staticpos-justify-self-001-ref.html
 
 == flex-abspos-staticpos-margin-001.html flex-abspos-staticpos-margin-001-ref.html
 == flex-abspos-staticpos-margin-002.html flex-abspos-staticpos-margin-002-ref.html
 
-fails-if(styloVsGecko) == grid-abspos-staticpos-align-self-001.html grid-abspos-staticpos-align-self-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-staticpos-align-self-001.html grid-abspos-staticpos-align-self-001-ref.html
 == grid-abspos-staticpos-align-self-002.html grid-abspos-staticpos-align-self-002-ref.html
-fails-if(styloVsGecko) == grid-abspos-staticpos-align-self-img-001.html grid-abspos-staticpos-align-self-img-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-staticpos-align-self-img-001.html grid-abspos-staticpos-align-self-img-001-ref.html
 == grid-abspos-staticpos-align-self-img-002.html grid-abspos-staticpos-align-self-img-002-ref.html
-fails-if(styloVsGecko) == grid-abspos-staticpos-align-self-rtl-001.html grid-abspos-staticpos-align-self-rtl-001-ref.html
-fails-if(styloVsGecko) == grid-abspos-staticpos-align-self-rtl-002.html grid-abspos-staticpos-align-self-rtl-002-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-staticpos-align-self-rtl-001.html grid-abspos-staticpos-align-self-rtl-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-staticpos-align-self-rtl-002.html grid-abspos-staticpos-align-self-rtl-002-ref.html
 == grid-abspos-staticpos-align-self-rtl-003.html grid-abspos-staticpos-align-self-rtl-003-ref.html
 == grid-abspos-staticpos-align-self-rtl-004.html grid-abspos-staticpos-align-self-rtl-004-ref.html
-fails-if(styloVsGecko) == grid-abspos-staticpos-align-self-vertWM-001.html grid-abspos-staticpos-align-self-vertWM-001-ref.html
-fails-if(styloVsGecko) == grid-abspos-staticpos-align-self-vertWM-002.html grid-abspos-staticpos-align-self-vertWM-002-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-staticpos-align-self-vertWM-001.html grid-abspos-staticpos-align-self-vertWM-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-staticpos-align-self-vertWM-002.html grid-abspos-staticpos-align-self-vertWM-002-ref.html
 == grid-abspos-staticpos-align-self-vertWM-003.html grid-abspos-staticpos-align-self-vertWM-003-ref.html
 == grid-abspos-staticpos-align-self-vertWM-004.html grid-abspos-staticpos-align-self-vertWM-004-ref.html
 
-fails-if(styloVsGecko) == grid-abspos-staticpos-justify-self-001.html grid-abspos-staticpos-justify-self-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-staticpos-justify-self-001.html grid-abspos-staticpos-justify-self-001-ref.html
 == grid-abspos-staticpos-justify-self-002.html grid-abspos-staticpos-justify-self-002-ref.html
-fails-if(styloVsGecko) == grid-abspos-staticpos-justify-self-img-001.html grid-abspos-staticpos-justify-self-img-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-staticpos-justify-self-img-001.html grid-abspos-staticpos-justify-self-img-001-ref.html
 == grid-abspos-staticpos-justify-self-img-002.html grid-abspos-staticpos-justify-self-img-002-ref.html
-fails-if(styloVsGecko) == grid-abspos-staticpos-justify-self-rtl-001.html grid-abspos-staticpos-justify-self-rtl-001-ref.html
-fails-if(styloVsGecko) == grid-abspos-staticpos-justify-self-rtl-002.html grid-abspos-staticpos-justify-self-rtl-002-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-staticpos-justify-self-rtl-001.html grid-abspos-staticpos-justify-self-rtl-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-staticpos-justify-self-rtl-002.html grid-abspos-staticpos-justify-self-rtl-002-ref.html
 == grid-abspos-staticpos-justify-self-rtl-003.html grid-abspos-staticpos-justify-self-rtl-003-ref.html
 == grid-abspos-staticpos-justify-self-rtl-004.html grid-abspos-staticpos-justify-self-rtl-004-ref.html
-fails-if(styloVsGecko) == grid-abspos-staticpos-justify-self-vertWM-001.html grid-abspos-staticpos-justify-self-vertWM-001-ref.html
-fails-if(styloVsGecko) == grid-abspos-staticpos-justify-self-vertWM-002.html grid-abspos-staticpos-justify-self-vertWM-002-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-staticpos-justify-self-vertWM-001.html grid-abspos-staticpos-justify-self-vertWM-001-ref.html
+fails-if(styloVsGecko||stylo) == grid-abspos-staticpos-justify-self-vertWM-002.html grid-abspos-staticpos-justify-self-vertWM-002-ref.html
 == grid-abspos-staticpos-justify-self-vertWM-003.html grid-abspos-staticpos-justify-self-vertWM-003-ref.html
 == grid-abspos-staticpos-justify-self-vertWM-004.html grid-abspos-staticpos-justify-self-vertWM-004-ref.html
--- a/layout/reftests/w3c-css/submitted/lists-3/reftest.list
+++ b/layout/reftests/w3c-css/submitted/lists-3/reftest.list
@@ -1,3 +1,3 @@
 # Tests for list-style-type
-fails-if(styloVsGecko||webrender) == list-style-type-string-001a.html list-style-type-string-001-ref.html
-fails-if(styloVsGecko||webrender) == list-style-type-string-001b.html list-style-type-string-001-ref.html
+fails-if(webrender) == list-style-type-string-001a.html list-style-type-string-001-ref.html
+fails-if(webrender) == list-style-type-string-001b.html list-style-type-string-001-ref.html
--- a/layout/reftests/w3c-css/submitted/ruby/reftest.list
+++ b/layout/reftests/w3c-css/submitted/ruby/reftest.list
@@ -1,21 +1,21 @@
 # Tests for inlinizing block-level boxes
-skip-if(styloVsGecko) == ruby-inlinize-blocks-001.html ruby-inlinize-blocks-001-ref.html
-fails-if(styloVsGecko) == ruby-inlinize-blocks-002.html ruby-inlinize-blocks-002-ref.html
+skip-if(styloVsGecko||stylo) == ruby-inlinize-blocks-001.html ruby-inlinize-blocks-001-ref.html
+fails-if(styloVsGecko||stylo) == ruby-inlinize-blocks-002.html ruby-inlinize-blocks-002-ref.html
 == ruby-inlinize-blocks-003.html ruby-inlinize-blocks-003-ref.html
-skip-if(styloVsGecko) == ruby-inlinize-blocks-004.html ruby-inlinize-blocks-004-ref.html
-skip-if(styloVsGecko) == ruby-inlinize-blocks-005.html ruby-inlinize-blocks-005-ref.html
+skip-if(styloVsGecko||stylo) == ruby-inlinize-blocks-004.html ruby-inlinize-blocks-004-ref.html
+skip-if(styloVsGecko||stylo) == ruby-inlinize-blocks-005.html ruby-inlinize-blocks-005-ref.html
 
 # Tests for autohiding base-identical annotations
 == ruby-autohide-001.html ruby-autohide-001-ref.html
 == ruby-autohide-002.html ruby-autohide-002-ref.html
 == ruby-autohide-003.html ruby-autohide-003-ref.html
 == ruby-autohide-004.html ruby-autohide-001-ref.html
 
 # Tests for ruby with text-combine-upright
-fails-if(styloVsGecko) == ruby-text-combine-upright-001a.html ruby-text-combine-upright-001-ref.html
-fails-if(styloVsGecko) == ruby-text-combine-upright-001b.html ruby-text-combine-upright-001-ref.html
+fails-if(styloVsGecko||stylo) == ruby-text-combine-upright-001a.html ruby-text-combine-upright-001-ref.html
+fails-if(styloVsGecko||stylo) == ruby-text-combine-upright-001b.html ruby-text-combine-upright-001-ref.html
 == ruby-text-combine-upright-002a.html ruby-text-combine-upright-002-ref.html
 == ruby-text-combine-upright-002b.html ruby-text-combine-upright-002-ref.html
 
 # Tests for nested ruby
 fails-if(styloVsGecko) == nested-ruby-pairing-001.html nested-ruby-pairing-001-ref.html
--- a/layout/reftests/w3c-css/submitted/text-decor-3/reftest.list
+++ b/layout/reftests/w3c-css/submitted/text-decor-3/reftest.list
@@ -1,9 +1,9 @@
-== ruby-text-decoration-01.html ruby-text-decoration-01-ref.html
+fails-if(stylo) == ruby-text-decoration-01.html ruby-text-decoration-01-ref.html
 == text-decoration-propagation-01.html text-decoration-propagation-01-ref.html
 
 # text-emphasis-style
 == text-emphasis-style-property-001.html text-emphasis-style-property-001-ref.html
 fuzzy-if(gtkWidget,3,4) fuzzy-if(skiaContent,104,80)  == text-emphasis-style-property-002.html text-emphasis-style-property-002-ref.html
 == text-emphasis-style-property-003.html text-emphasis-style-property-003-ref.html
 == text-emphasis-style-property-004.html text-emphasis-style-property-004-ref.html
 == text-emphasis-style-property-005.html text-emphasis-style-property-005-ref.html
@@ -123,9 +123,9 @@ fuzzy-if(gtkWidget,3,4) == text-emphasis
 == text-emphasis-line-height-003b.html text-emphasis-line-height-003-ref.html
 == text-emphasis-line-height-003c.html text-emphasis-line-height-003-ref.html
 == text-emphasis-line-height-003d.html text-emphasis-line-height-003-ref.html
 == text-emphasis-line-height-004a.html text-emphasis-line-height-004-ref.html
 == text-emphasis-line-height-004b.html text-emphasis-line-height-004-ref.html
 == text-emphasis-line-height-004c.html text-emphasis-line-height-004-ref.html
 == text-emphasis-line-height-004d.html text-emphasis-line-height-004-ref.html
 # END tests from support/generate-text-emphasis-line-height-tests.py
-fuzzy-if(gtkWidget,3,4) fuzzy-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu),43,1) fails-if(styloVsGecko) == text-emphasis-line-height-001z.html text-emphasis-line-height-001-ref.html
+fuzzy-if(gtkWidget,3,4) fuzzy-if(/^Windows\x20NT\x2010\.0/.test(http.oscpu),43,1) fails-if(styloVsGecko||stylo) == text-emphasis-line-height-001z.html text-emphasis-line-height-001-ref.html
--- a/layout/reftests/webcomponents/reftest.list
+++ b/layout/reftests/webcomponents/reftest.list
@@ -1,19 +1,19 @@
 pref(dom.webcomponents.enabled,true) == cross-tree-selection-1.html cross-tree-selection-1-ref.html
 pref(dom.webcomponents.enabled,true) == basic-shadow-1.html basic-shadow-1-ref.html
 pref(dom.webcomponents.enabled,true) == basic-shadow-2.html basic-shadow-2-ref.html
 pref(dom.webcomponents.enabled,true) == basic-shadow-3.html basic-shadow-3-ref.html
 pref(dom.webcomponents.enabled,true) == basic-shadow-4.html basic-shadow-4-ref.html
 pref(dom.webcomponents.enabled,true) == basic-insertion-point-1.html basic-insertion-point-1-ref.html
-pref(dom.webcomponents.enabled,true) skip-if(styloVsGecko) == basic-insertion-point-2.html basic-insertion-point-2-ref.html
+pref(dom.webcomponents.enabled,true) skip-if(styloVsGecko||stylo) == basic-insertion-point-2.html basic-insertion-point-2-ref.html
 pref(dom.webcomponents.enabled,true) == adjacent-insertion-points-1.html adjacent-insertion-points-1-ref.html
 pref(dom.webcomponents.enabled,true) == adjacent-insertion-points-2.html adjacent-insertion-points-2-ref.html
 pref(dom.webcomponents.enabled,true) == fallback-content-1.html fallback-content-1-ref.html
 pref(dom.webcomponents.enabled,true) == remove-insertion-point-1.html remove-insertion-point-1-ref.html
 pref(dom.webcomponents.enabled,true) == nested-insertion-point-1.html nested-insertion-point-1-ref.html
-pref(dom.webcomponents.enabled,true) skip-if(styloVsGecko) == basic-shadow-element-1.html basic-shadow-element-1-ref.html
-pref(dom.webcomponents.enabled,true) skip-if(styloVsGecko) == nested-shadow-element-1.html nested-shadow-element-1-ref.html
-pref(dom.webcomponents.enabled,true) skip-if(styloVsGecko) == update-dist-node-descendants-1.html update-dist-node-descendants-1-ref.html
-pref(dom.webcomponents.enabled,true) skip-if(styloVsGecko) == input-transition-1.html input-transition-1-ref.html
+pref(dom.webcomponents.enabled,true) skip-if(styloVsGecko||stylo) == basic-shadow-element-1.html basic-shadow-element-1-ref.html
+pref(dom.webcomponents.enabled,true) skip-if(styloVsGecko||stylo) == nested-shadow-element-1.html nested-shadow-element-1-ref.html
+pref(dom.webcomponents.enabled,true) skip-if(styloVsGecko||stylo) == update-dist-node-descendants-1.html update-dist-node-descendants-1-ref.html
+pref(dom.webcomponents.enabled,true) skip-if(styloVsGecko||stylo) == input-transition-1.html input-transition-1-ref.html
 pref(dom.webcomponents.enabled,true) == dynamic-insertion-point-distribution-1.html dynamic-insertion-point-distribution-1-ref.html
 pref(dom.webcomponents.enabled,true) == dynamic-insertion-point-distribution-2.html dynamic-insertion-point-distribution-2-ref.html
 pref(dom.webcomponents.enabled,true) == remove-append-shadow-host-1.html remove-append-shadow-host-1-ref.html
--- a/layout/reftests/webkit-gradient/reftest.list
+++ b/layout/reftests/webkit-gradient/reftest.list
@@ -7,14 +7,14 @@ default-preferences pref(layout.css.pref
 # change unexpectedly.)
 == webkit-gradient-approx-radial-1.html webkit-gradient-approx-radial-1-ref.html
 
 # Tests for -webkit-gradient(linear, ...)
 == webkit-gradient-linear-1a.html webkit-gradient-linear-1-ref.html
 == webkit-gradient-linear-1b.html webkit-gradient-linear-1-ref.html
 == webkit-gradient-linear-1c.html webkit-gradient-linear-1-ref.html
 == webkit-gradient-linear-1d.html webkit-gradient-linear-1-ref.html
-fails-if(styloVsGecko) == webkit-gradient-linear-2.html webkit-gradient-linear-2-ref.html
+fails-if(styloVsGecko||stylo) == webkit-gradient-linear-2.html webkit-gradient-linear-2-ref.html
 
 # Tests for -webkit-gradient(radial, ...)
 == webkit-gradient-radial-1a.html webkit-gradient-radial-1-ref.html
 == webkit-gradient-radial-1b.html webkit-gradient-radial-1-ref.html
 == webkit-gradient-radial-2.html webkit-gradient-radial-2-ref.html
--- a/layout/reftests/writing-mode/reftest.list
+++ b/layout/reftests/writing-mode/reftest.list
@@ -102,17 +102,17 @@ HTTP(..) == 1127488-align-end-vertical-l
 HTTP(..) == 1127488-align-left-vertical-lr-ltr.html 1127488-align-top-left-ref.html
 HTTP(..) == 1127488-align-right-vertical-lr-ltr.html 1127488-align-bottom-left-ref.html
 == 1130907-intrinsic-sizing-1.html 1130907-intrinsic-sizing-1-ref.html
 == 1130907-intrinsic-sizing-2.html 1130907-intrinsic-sizing-2-ref.html
 == 1131013-vertical-bidi.html 1131013-vertical-bidi-ref.html
 == 1133945-1-vertical-align.html 1133945-1-vertical-align-ref.html
 skip-if(Android) == 1134744-radio-checkbox-baseline-1.html 1134744-radio-checkbox-baseline-1-ref.html # Disabled on Android until bug 1352238 is fixed.
 == 1134849-orthogonal-inline.html 1134849-orthogonal-inline-ref.html
-fails-if(styloVsGecko) == 1135361-ruby-justify-1.html 1135361-ruby-justify-1-ref.html # bug 1136067
+fails-if(styloVsGecko||stylo) == 1135361-ruby-justify-1.html 1135361-ruby-justify-1-ref.html # bug 1136067
 fuzzy-if(winWidget,255,163) fuzzy-if(skiaContent,159,111) == 1136557-1-nested-spans.html 1136557-1-nested-spans-ref.html
 fuzzy-if(winWidget,255,221) fuzzy-if(skiaContent,159,111) == 1136557-2-nested-spans.html 1136557-2-nested-spans-ref.html
 fuzzy-if(winWidget,255,236) == 1136557-3-nested-spans.html 1136557-3-nested-spans-ref.html
 == 1138356-1-button-contents-alignment.html 1138356-1-button-contents-alignment-ref.html
 != 1138356-2-button-contents-alignment.html 1138356-2-button-contents-alignment-notref.html
 
 # Font inflation behaves wrong in vertical writing mode: bug 1138495
 test-pref(dom.meta-viewport.enabled,true) test-pref(font.size.inflation.emPerLine,15) test-pref(font.size.inflation.forceEnabled,true) test-pref(font.size.inflation.lineThreshold,0) == font-inflation-1a.html font-inflation-1-ref.html
--- a/layout/style/CounterStyleManager.cpp
+++ b/layout/style/CounterStyleManager.cpp
@@ -1696,26 +1696,41 @@ AnonymousCounterStyle::AnonymousCounterS
   : CounterStyle(NS_STYLE_LIST_STYLE_CUSTOM)
   , mSingleString(true)
   , mSystem(NS_STYLE_COUNTER_SYSTEM_CYCLIC)
 {
   mSymbols.SetCapacity(1);
   mSymbols.AppendElement(aContent);
 }
 
+static nsTArray<nsString>
+CollectSymbolsFromCSSValueList(const nsCSSValueList* aList)
+{
+  nsTArray<nsString> symbols;
+  for (const nsCSSValueList* item = aList; item; item = item->mNext) {
+    item->mValue.GetStringValue(*symbols.AppendElement());
+  }
+  symbols.Compact();
+  return symbols;
+}
+
 AnonymousCounterStyle::AnonymousCounterStyle(const nsCSSValue::Array* aParams)
+  : AnonymousCounterStyle(
+      aParams->Item(0).GetIntValue(),
+      CollectSymbolsFromCSSValueList(aParams->Item(1).GetListValue()))
+{
+}
+
+AnonymousCounterStyle::AnonymousCounterStyle(uint8_t aSystem,
+                                             nsTArray<nsString> aSymbols)
   : CounterStyle(NS_STYLE_LIST_STYLE_CUSTOM)
   , mSingleString(false)
-  , mSystem(aParams->Item(0).GetIntValue())
+  , mSystem(aSystem)
+  , mSymbols(Move(aSymbols))
 {
-  for (const nsCSSValueList* item = aParams->Item(1).GetListValue();
-       item; item = item->mNext) {
-    item->mValue.GetStringValue(*mSymbols.AppendElement());
-  }
-  mSymbols.Compact();
 }
 
 /* virtual */ void
 AnonymousCounterStyle::GetStyleName(nsAString& aResult)
 {
   aResult.Truncate();
 }
 
--- a/layout/style/CounterStyleManager.h
+++ b/layout/style/CounterStyleManager.h
@@ -99,16 +99,17 @@ public:
 protected:
   int32_t mStyle;
 };
 
 class AnonymousCounterStyle final : public CounterStyle
 {
 public:
   explicit AnonymousCounterStyle(const nsSubstring& aContent);
+  AnonymousCounterStyle(uint8_t aSystem, nsTArray<nsString> aSymbols);
   explicit AnonymousCounterStyle(const nsCSSValue::Array* aValue);
 
   virtual void GetStyleName(nsAString& aResult) override;
   virtual void GetPrefix(nsAString& aResult) override;
   virtual void GetSuffix(nsAString& aResult) override;
   virtual bool IsBullet() override;
 
   virtual void GetNegative(NegativeType& aResult) override;
@@ -145,18 +146,28 @@ private:
 // managed by counter style manager.
 class CounterStylePtr
 {
 public:
   CounterStylePtr() : mRaw(0) {}
   CounterStylePtr(const CounterStylePtr& aOther)
     : mRaw(aOther.mRaw)
   {
-    if (IsAnonymous()) {
-      AsAnonymous()->AddRef();
+    switch (GetType()) {
+      case eCounterStyle:
+        break;
+      case eAnonymousCounterStyle:
+        AsAnonymous()->AddRef();
+        break;
+      case eUnresolvedAtom:
+        AsAtom()->AddRef();
+        break;
+      case eMask:
+        MOZ_ASSERT_UNREACHABLE("Unknown type");
+        break;
     }
   }
   CounterStylePtr(CounterStylePtr&& aOther)
     : mRaw(aOther.mRaw)
   {
     aOther.mRaw = 0;
   }
   ~CounterStylePtr() { Reset(); }
@@ -164,88 +175,139 @@ public:
   CounterStylePtr& operator=(const CounterStylePtr& aOther)
   {
     if (this != &aOther) {
       Reset();
       new (this) CounterStylePtr(aOther);
     }
     return *this;
   }
+  CounterStylePtr& operator=(CounterStylePtr&& aOther)
+  {
+    if (this != &aOther) {
+      Reset();
+      mRaw = aOther.mRaw;
+      aOther.mRaw = 0;
+    }
+    return *this;
+  }
   CounterStylePtr& operator=(decltype(nullptr))
   {
     Reset();
     return *this;
   }
+  CounterStylePtr& operator=(already_AddRefed<nsIAtom> aAtom)
+  {
+    Reset();
+    if (nsIAtom* raw = aAtom.take()) {
+      AssertPointerAligned(raw);
+      mRaw = reinterpret_cast<uintptr_t>(raw) | eUnresolvedAtom;
+    }
+    return *this;
+  }
   CounterStylePtr& operator=(AnonymousCounterStyle* aCounterStyle)
   {
     Reset();
     if (aCounterStyle) {
       CounterStyle* raw = do_AddRef(aCounterStyle).take();
       AssertPointerAligned(raw);
-      mRaw = reinterpret_cast<uintptr_t>(raw) | kAnonymousFlag;
+      mRaw = reinterpret_cast<uintptr_t>(raw) | eAnonymousCounterStyle;
     }
     return *this;
   }
   CounterStylePtr& operator=(CounterStyle* aCounterStyle)
   {
     Reset();
     if (aCounterStyle) {
       MOZ_ASSERT(!aCounterStyle->AsAnonymous());
       AssertPointerAligned(aCounterStyle);
-      mRaw = reinterpret_cast<uintptr_t>(aCounterStyle);
+      mRaw = reinterpret_cast<uintptr_t>(aCounterStyle) | eCounterStyle;
     }
     return *this;
   }
 
   operator CounterStyle*() const & { return Get(); }
   operator CounterStyle*() const && = delete;
   CounterStyle* operator->() const { return Get(); }
   explicit operator bool() const { return !!mRaw; }
   bool operator!() const { return !mRaw; }
   bool operator==(const CounterStylePtr& aOther) const
     { return mRaw == aOther.mRaw; }
   bool operator!=(const CounterStylePtr& aOther) const
     { return mRaw != aOther.mRaw; }
 
+  bool IsResolved() const { return !IsUnresolved(); }
+  inline void Resolve(CounterStyleManager* aManager);
+
 private:
   CounterStyle* Get() const
   {
-    return reinterpret_cast<CounterStyle*>(mRaw & ~kAnonymousFlag);
+    MOZ_ASSERT(IsResolved());
+    return reinterpret_cast<CounterStyle*>(mRaw & ~eMask);
   }
-  void AssertPointerAligned(CounterStyle* aPointer)
+  template<typename T>
+  void AssertPointerAligned(T* aPointer)
   {
     // This can be checked at compile time via
-    // > static_assert(alignof(CounterStyle) >= 2);
+    // > static_assert(alignof(CounterStyle) >= 4);
+    // > static_assert(alignof(nsIAtom) >= 4);
     // but MSVC2015 doesn't support using alignof on an abstract class.
     // Once we move to MSVC2017, we can replace this runtime check with
     // the compile time check above.
-    MOZ_ASSERT(!(reinterpret_cast<uintptr_t>(aPointer) & kAnonymousFlag));
+    MOZ_ASSERT(!(reinterpret_cast<uintptr_t>(aPointer) & eMask));
   }
 
-  bool IsAnonymous() const { return !!(mRaw & kAnonymousFlag); }
+  enum Type : uintptr_t {
+    eCounterStyle = 0,
+    eAnonymousCounterStyle = 1,
+    eUnresolvedAtom = 2,
+    eMask = 3,
+  };
+
+  Type GetType() const { return static_cast<Type>(mRaw & eMask); }
+  bool IsUnresolved() const { return GetType() == eUnresolvedAtom; }
+  bool IsAnonymous() const { return GetType() == eAnonymousCounterStyle; }
+  nsIAtom* AsAtom()
+  {
+    MOZ_ASSERT(IsUnresolved());
+    return reinterpret_cast<nsIAtom*>(mRaw & ~eMask);
+  }
   AnonymousCounterStyle* AsAnonymous()
   {
     MOZ_ASSERT(IsAnonymous());
     return static_cast<AnonymousCounterStyle*>(
-      reinterpret_cast<CounterStyle*>(mRaw & ~kAnonymousFlag));
+      reinterpret_cast<CounterStyle*>(mRaw & ~eMask));
   }
 
   void Reset()
   {
-    if (IsAnonymous()) {
-      AsAnonymous()->Release();
+    switch (GetType()) {
+      case eCounterStyle:
+        break;
+      case eAnonymousCounterStyle:
+        AsAnonymous()->Release();
+        break;
+      case eUnresolvedAtom:
+        AsAtom()->Release();
+        break;
+      case eMask:
+        MOZ_ASSERT_UNREACHABLE("Unknown type");
+        break;
     }
     mRaw = 0;
   }
 
-  // mRaw contains the pointer, and its last bit is used for the flag.
-  // If the flag is set, this pointer owns an AnonymousCounterStyle,
-  // otherwise, it is a weak pointer referring a named counter style
+  // mRaw contains the pointer, and its last two bits are used for type
+  // of the pointer.
+  // If the type is eUnresolvedAtom, the pointer owns a reference to an
+  // nsIAtom, and it needs to be resolved to a counter style before use.
+  // If the type is eAnonymousCounterStyle, it owns a reference to an
+  // anonymous counter style.
+  // Otherwise it is a weak pointer referring a named counter style
   // managed by CounterStyleManager.
-  static const uintptr_t kAnonymousFlag = 1;
   uintptr_t mRaw;
 };
 
 class CounterStyleManager final
 {
 private:
   ~CounterStyleManager();
 public:
@@ -290,11 +352,19 @@ public:
 private:
   void DestroyCounterStyle(CounterStyle* aCounterStyle);
 
   nsPresContext* mPresContext;
   nsDataHashtable<nsRefPtrHashKey<nsIAtom>, CounterStyle*> mStyles;
   nsTArray<CounterStyle*> mRetiredStyles;
 };
 
+void
+CounterStylePtr::Resolve(CounterStyleManager* aManager)
+{
+  if (IsUnresolved()) {
+    *this = aManager->BuildCounterStyle(AsAtom());
+  }
+}
+
 } // namespace mozilla
 
 #endif /* !defined(mozilla_CounterStyleManager_h_) */
--- a/layout/style/ServoBindings.cpp
+++ b/layout/style/ServoBindings.cpp
@@ -1154,25 +1154,43 @@ Gecko_SetImageOrientationAsFromImage(nsS
 void
 Gecko_CopyImageOrientationFrom(nsStyleVisibility* aDst,
                                const nsStyleVisibility* aSrc)
 {
   aDst->mImageOrientation = aSrc->mImageOrientation;
 }
 
 void
-Gecko_SetListStyleType(nsStyleList* aList, nsIAtom* aName)
+Gecko_SetCounterStyleToName(CounterStylePtr* aPtr, nsIAtom* aName)
 {
-  aList->SetListStyleType(aName);
+  *aPtr = already_AddRefed<nsIAtom>(aName);
 }
 
 void
-Gecko_CopyListStyleTypeFrom(nsStyleList* aDst, const nsStyleList* aSrc)
+Gecko_SetCounterStyleToSymbols(CounterStylePtr* aPtr, uint8_t aSymbolsType,
+                               nsACString const* const* aSymbols,
+                               uint32_t aSymbolsCount)
 {
-  aDst->CopyListStyleTypeFrom(*aSrc);
+  nsTArray<nsString> symbols(aSymbolsCount);
+  for (uint32_t i = 0; i < aSymbolsCount; i++) {
+    symbols.AppendElement(NS_ConvertUTF8toUTF16(*aSymbols[i]));
+  }
+  *aPtr = new AnonymousCounterStyle(aSymbolsType, Move(symbols));
+}
+
+void
+Gecko_SetCounterStyleToString(CounterStylePtr* aPtr, const nsACString* aSymbol)
+{
+  *aPtr = new AnonymousCounterStyle(NS_ConvertUTF8toUTF16(*aSymbol));
+}
+
+void
+Gecko_CopyCounterStyle(CounterStylePtr* aDst, const CounterStylePtr* aSrc)
+{
+  *aDst = *aSrc;
 }
 
 already_AddRefed<css::URLValue>
 ServoBundledURI::IntoCssUrl()
 {
   if (!mURLString) {
     return nullptr;
   }
@@ -1719,16 +1737,31 @@ Gecko_nsStyleSVG_SetDashArrayLength(nsSt
 }
 
 void
 Gecko_nsStyleSVG_CopyDashArray(nsStyleSVG* aDst, const nsStyleSVG* aSrc)
 {
   aDst->mStrokeDasharray = aSrc->mStrokeDasharray;
 }
 
+void
+Gecko_nsStyleSVG_SetContextPropertiesLength(nsStyleSVG* aSvg, uint32_t aLen)
+{
+  aSvg->mContextProps.Clear();
+  aSvg->mContextProps.SetLength(aLen);
+}
+
+void
+Gecko_nsStyleSVG_CopyContextProperties(nsStyleSVG* aDst, const nsStyleSVG* aSrc)
+{
+  aDst->mContextProps = aSrc->mContextProps;
+  aDst->mContextPropsBits = aSrc->mContextPropsBits;
+}
+
+
 css::URLValue*
 Gecko_NewURLValue(ServoBundledURI aURI)
 {
   RefPtr<css::URLValue> url = aURI.IntoCssUrl();
   return url.forget().take();
 }
 
 NS_IMPL_THREADSAFE_FFI_REFCOUNTING(css::URLValue, CSSURLValue);
@@ -1985,16 +2018,36 @@ Gecko_nsStyleFont_FixupNoneGeneric(nsSty
                                    RawGeckoPresContextBorrowed aPresContext)
 {
   const nsFont* defaultVariableFont = ThreadSafeGetDefaultFontHelper(aPresContext, aFont->mLanguage);
   nsRuleNode::FixupNoneGeneric(&aFont->mFont, aPresContext,
                                aFont->mGenericID, defaultVariableFont);
 }
 
 void
+Gecko_nsStyleFont_FixupMinFontSize(nsStyleFont* aFont,
+                                   RawGeckoPresContextBorrowed aPresContext)
+{
+  nscoord minFontSize;
+  bool needsCache = false;
+
+  {
+    AutoReadLock guard(*sServoLangFontPrefsLock);
+    minFontSize = aPresContext->MinFontSize(aFont->mLanguage, &needsCache);
+  }
+
+  if (needsCache) {
+    AutoWriteLock guard(*sServoLangFontPrefsLock);
+    minFontSize = aPresContext->MinFontSize(aFont->mLanguage, nullptr);
+  }
+
+  nsRuleNode::ApplyMinFontSize(aFont, aPresContext, minFontSize);
+}
+
+void
 FontSizePrefs::CopyFrom(const LangGroupFontPrefs& prefs)
 {
   mDefaultVariableSize = prefs.mDefaultVariableFont.size;
   mDefaultFixedSize = prefs.mDefaultFixedFont.size;
   mDefaultSerifSize = prefs.mDefaultSerifFont.size;
   mDefaultSansSerifSize = prefs.mDefaultSansSerifFont.size;
   mDefaultMonospaceSize = prefs.mDefaultMonospaceFont.size;
   mDefaultCursiveSize = prefs.mDefaultCursiveFont.size;
--- a/layout/style/ServoBindings.h
+++ b/layout/style/ServoBindings.h
@@ -269,18 +269,26 @@ void Gecko_nsFont_Destroy(nsFont* dst);
 void Gecko_SetImageOrientation(nsStyleVisibility* aVisibility,
                                double aRadians,
                                bool aFlip);
 void Gecko_SetImageOrientationAsFromImage(nsStyleVisibility* aVisibility);
 void Gecko_CopyImageOrientationFrom(nsStyleVisibility* aDst,
                                     const nsStyleVisibility* aSrc);
 
 // Counter style.
-void Gecko_SetListStyleType(nsStyleList* style_struct, nsIAtom* name);
-void Gecko_CopyListStyleTypeFrom(nsStyleList* dst, const nsStyleList* src);
+// This function takes an already addrefed nsIAtom
+void Gecko_SetCounterStyleToName(mozilla::CounterStylePtr* ptr, nsIAtom* name);
+void Gecko_SetCounterStyleToSymbols(mozilla::CounterStylePtr* ptr,
+                                    uint8_t symbols_type,
+                                    nsACString const* const* symbols,
+                                    uint32_t symbols_count);
+void Gecko_SetCounterStyleToString(mozilla::CounterStylePtr* ptr,
+                                   const nsACString* symbol);
+void Gecko_CopyCounterStyle(mozilla::CounterStylePtr* dst,
+                            const mozilla::CounterStylePtr* src);
 
 // background-image style.
 void Gecko_SetNullImageValue(nsStyleImage* image);
 void Gecko_SetGradientImageValue(nsStyleImage* image, nsStyleGradient* gradient);
 NS_DECL_THREADSAFE_FFI_REFCOUNTING(mozilla::css::ImageValue, ImageValue);
 mozilla::css::ImageValue* Gecko_ImageValue_Create(ServoBundledURI aURI);
 void Gecko_SetLayerImageImageValue(nsStyleImage* image,
                                    mozilla::css::ImageValue* aImageValue);
@@ -437,16 +445,18 @@ void Gecko_CopyFiltersFrom(nsStyleEffect
 void Gecko_nsStyleFilter_SetURLValue(nsStyleFilter* effects, ServoBundledURI uri);
 
 void Gecko_nsStyleSVGPaint_CopyFrom(nsStyleSVGPaint* dest, const nsStyleSVGPaint* src);
 void Gecko_nsStyleSVGPaint_SetURLValue(nsStyleSVGPaint* paint, ServoBundledURI uri);
 void Gecko_nsStyleSVGPaint_Reset(nsStyleSVGPaint* paint);
 
 void Gecko_nsStyleSVG_SetDashArrayLength(nsStyleSVG* svg, uint32_t len);
 void Gecko_nsStyleSVG_CopyDashArray(nsStyleSVG* dst, const nsStyleSVG* src);
+void Gecko_nsStyleSVG_SetContextPropertiesLength(nsStyleSVG* svg, uint32_t len);
+void Gecko_nsStyleSVG_CopyContextProperties(nsStyleSVG* dst, const nsStyleSVG* src);
 
 mozilla::css::URLValue* Gecko_NewURLValue(ServoBundledURI uri);
 NS_DECL_THREADSAFE_FFI_REFCOUNTING(mozilla::css::URLValue, CSSURLValue);
 NS_DECL_THREADSAFE_FFI_REFCOUNTING(RawGeckoURLExtraData, URLExtraData);
 
 void Gecko_FillAllBackgroundLists(nsStyleImageLayers* layers, uint32_t max_len);
 void Gecko_FillAllMaskLists(nsStyleImageLayers* layers, uint32_t max_len);
 NS_DECL_THREADSAFE_FFI_REFCOUNTING(nsStyleCoord::Calc, Calc);
@@ -492,16 +502,18 @@ void Gecko_CSSValue_SetPairList(nsCSSVal
 void Gecko_CSSValue_Drop(nsCSSValueBorrowedMut css_value);
 NS_DECL_THREADSAFE_FFI_REFCOUNTING(nsCSSValueSharedList, CSSValueSharedList);
 bool Gecko_PropertyId_IsPrefEnabled(nsCSSPropertyID id);
 
 void Gecko_nsStyleFont_SetLang(nsStyleFont* font, nsIAtom* atom);
 void Gecko_nsStyleFont_CopyLangFrom(nsStyleFont* aFont, const nsStyleFont* aSource);
 void Gecko_nsStyleFont_FixupNoneGeneric(nsStyleFont* font,
                                         RawGeckoPresContextBorrowed pres_context);
+void Gecko_nsStyleFont_FixupMinFontSize(nsStyleFont* font,
+                                        RawGeckoPresContextBorrowed pres_context);
 FontSizePrefs Gecko_GetBaseSize(nsIAtom* lang);
 
 struct GeckoFontMetrics
 {
   nscoord mChSize;
   nscoord mXSize;
 };
 
--- a/layout/style/ServoBindings.toml
+++ b/layout/style/ServoBindings.toml
@@ -124,16 +124,17 @@ whitelist-types = [
     "mozilla::HalfCorner",
     "mozilla::PropertyStyleAnimationValuePair",
     "mozilla::TraversalRestyleBehavior",
     "mozilla::TraversalRootBehavior",
     "mozilla::StyleShapeRadius",
     "mozilla::StyleGrid.*",
     "mozilla::UpdateAnimationsTasks",
     "mozilla::LookAndFeel",
+    "mozilla::gfx::FontVariation",
     ".*ThreadSafe.*Holder",
     "AnonymousContent",
     "AudioContext",
     "CapturingContentInfo",
     "DefaultDelete",
     "DOMIntersectionObserverEntry",
     "Element",
     "FontFamilyList",
@@ -254,17 +255,18 @@ whitelist-types = [
     "mozilla::InheritTarget",
     "mozilla::StyleRuleInclusion",
 ]
 opaque-types = [
     "std::pair__PCCP",
     "std::namespace::atomic___base", "std::atomic__My_base",
     "std::atomic",
     "std::atomic___base",
-    "mozilla::gfx::.*",
+    # We want everything but FontVariation to be opaque but we don't have negative regexes ;_;
+    "mozilla::gfx::(.{0,12}|.{14,}|([^F][^o][^n][^t][^V][^a][^r][^i][^a][^t][^i][^o][^n]))",
     "FallibleTArray",
     "mozilla::dom::Sequence",
     "mozilla::dom::Optional",
     "mozilla::dom::Nullable",
     "RefPtr_Proxy",
     "RefPtr_Proxy_member_function",
     "nsAutoPtr_Proxy",
     "nsAutoPtr_Proxy_member_function",
@@ -339,16 +341,17 @@ structs-types = [
     "RawGeckoServoStyleRuleList",
     "RawGeckoURLExtraData",
     "RefPtr",
     "CSSPseudoClassType",
     "CSSPseudoElementType",
     "TraversalRestyleBehavior",
     "TraversalRootBehavior",
     "ComputedTimingFunction_BeforeFlag",
+    "CounterStylePtr",
     "FontFamilyList",
     "FontFamilyType",
     "FontSizePrefs",
     "GeckoFontMetrics",
     "IterationCompositeOperation",
     "Keyframe",
     "ServoBundledURI",
     "ServoElementSnapshot",
--- a/layout/style/nsRuleNode.cpp
+++ b/layout/style/nsRuleNode.cpp
@@ -438,16 +438,40 @@ nsRuleNode::FixupNoneGeneric(nsFont* aFo
         }
       }
     }
   } else {
     aFont->fontlist.SetDefaultFontType(eFamily_none);
   }
 }
 
+/* static */
+void
+nsRuleNode::ApplyMinFontSize(nsStyleFont* aFont,
+                             const nsPresContext* aPresContext,
+                             nscoord aMinFontSize)
+{
+  nscoord fontSize = aFont->mSize;
+
+  // enforce the user' specified minimum font-size on the value that we expose
+  // (but don't change font-size:0, since that would unhide hidden text)
+  if (fontSize > 0) {
+    if (aMinFontSize < 0) {
+      aMinFontSize = 0;
+    } else {
+      aMinFontSize = (aMinFontSize * aFont->mMinFontSizeRatio) / 100;
+    }
+    if (fontSize < aMinFontSize && !aPresContext->IsChrome()) {
+      // override the minimum font-size constraint
+      fontSize = aMinFontSize;
+    }
+  }
+  aFont->mFont.size = fontSize;
+}
+
 static nsSize CalcViewportUnitsScale(nsPresContext* aPresContext)
 {
   // The caller is making use of viewport units, so notify the pres context
   // that it will need to rebuild the rule tree if the size of the viewport
   // changes.
   aPresContext->SetUsesViewportUnits(true);
 
   // The default (when we have 'overflow: auto' on the root element, or
@@ -4036,33 +4060,18 @@ nsRuleNode::SetFont(nsPresContext* aPres
                 &aFont->mScriptUnconstrainedSize,
                 systemFont, aParentFont->mScriptUnconstrainedSize,
                 scriptLevelAdjustedUnconstrainedParentSize,
                 aUsedStartStruct, atRoot, unconstrainedConditions);
   }
   NS_ASSERTION(aFont->mScriptUnconstrainedSize <= aFont->mSize,
                "scriptminsize should never be making things bigger");
 
-  nscoord fontSize = aFont->mSize;
-
-  // enforce the user' specified minimum font-size on the value that we expose
-  // (but don't change font-size:0, since that would unhide hidden text)
-  if (fontSize > 0) {
-    nscoord minFontSize = aPresContext->MinFontSize(aFont->mLanguage);
-    if (minFontSize < 0) {
-      minFontSize = 0;
-    } else {
-      minFontSize = (minFontSize * aFont->mMinFontSizeRatio) / 100;
-    }
-    if (fontSize < minFontSize && !aPresContext->IsChrome()) {
-      // override the minimum font-size constraint
-      fontSize = minFontSize;
-    }
-  }
-  aFont->mFont.size = fontSize;
+  nsRuleNode::ApplyMinFontSize(aFont, aPresContext,
+                               aPresContext->MinFontSize(aFont->mLanguage));
 
   // font-size-adjust: number, none, inherit, initial, -moz-system-font
   const nsCSSValue* sizeAdjustValue = aRuleData->ValueForFontSizeAdjust();
   if (eCSSUnit_System_Font == sizeAdjustValue->GetUnit()) {
     aFont->mFont.sizeAdjust = systemFont.sizeAdjust;
   } else
     SetFactor(*sizeAdjustValue, aFont->mFont.sizeAdjust,
               aConditions, aParentFont->mFont.sizeAdjust, -1.0f,
--- a/layout/style/nsRuleNode.h
+++ b/layout/style/nsRuleNode.h
@@ -815,16 +815,24 @@ public:
    * Appropriately add the correct font if we are using DocumentFonts or
    * overriding for XUL
    */
   static void FixupNoneGeneric(nsFont* aFont,
                                const nsPresContext* aPresContext,
                                uint8_t aGenericFontID,
                                const nsFont* aDefaultVariableFont);
 
+  /**
+   * For an nsStyleFont with mSize set, apply minimum font size constraints
+   * from preferences, as well as -moz-min-font-size-ratio.
+   */
+  static void ApplyMinFontSize(nsStyleFont* aFont,
+                               const nsPresContext* aPresContext,
+                               nscoord aMinFontSize);
+
   // Transition never returns null; on out of memory it'll just return |this|.
   nsRuleNode* Transition(nsIStyleRule* aRule, mozilla::SheetType aLevel,
                          bool aIsImportantRule);
   nsRuleNode* GetParent() const { return mParent; }
   bool IsRoot() const { return mParent == nullptr; }
 
   // Return the root of the rule tree that this rule node is in.
   nsRuleNode* RuleTree();
--- a/layout/style/nsStyleConsts.h
+++ b/layout/style/nsStyleConsts.h
@@ -1056,16 +1056,27 @@ enum class StyleGridTrackBreadth : uint8
 #define NS_STYLE_GRADIENT_SIZE_EXPLICIT_SIZE    4
 
 // See nsStyleSVG
 
 // -moz-context-properties
 #define NS_STYLE_CONTEXT_PROPERTY_FILL          (1 << 0)
 #define NS_STYLE_CONTEXT_PROPERTY_STROKE        (1 << 1)
 
+/*
+ * -moz-window-shadow
+ * Also used in widget code
+ */
+
+#define NS_STYLE_WINDOW_SHADOW_NONE             0
+#define NS_STYLE_WINDOW_SHADOW_DEFAULT          1
+#define NS_STYLE_WINDOW_SHADOW_MENU             2
+#define NS_STYLE_WINDOW_SHADOW_TOOLTIP          3
+#define NS_STYLE_WINDOW_SHADOW_SHEET            4
+
 // dominant-baseline
 #define NS_STYLE_DOMINANT_BASELINE_AUTO              0
 #define NS_STYLE_DOMINANT_BASELINE_USE_SCRIPT        1
 #define NS_STYLE_DOMINANT_BASELINE_NO_CHANGE         2
 #define NS_STYLE_DOMINANT_BASELINE_RESET_SIZE        3
 #define NS_STYLE_DOMINANT_BASELINE_IDEOGRAPHIC       4
 #define NS_STYLE_DOMINANT_BASELINE_ALPHABETIC        5
 #define NS_STYLE_DOMINANT_BASELINE_HANGING           6
--- a/layout/style/nsStyleStruct.cpp
+++ b/layout/style/nsStyleStruct.cpp
@@ -598,55 +598,49 @@ nsStyleOutline::CalcDifference(const nsS
 // --------------------
 // nsStyleList
 //
 nsStyleList::nsStyleList(const nsPresContext* aContext)
   : mListStylePosition(NS_STYLE_LIST_STYLE_POSITION_OUTSIDE)
 {
   MOZ_COUNT_CTOR(nsStyleList);
   if (aContext->StyleSet()->IsServo()) {
-    mListStyleType = nsGkAtoms::disc;
+    mCounterStyle = do_AddRef(nsGkAtoms::disc);
   } else {
     mCounterStyle = aContext->
       CounterStyleManager()->BuildCounterStyle(nsGkAtoms::disc);
   }
   SetQuotesInitial();
 }
 
 nsStyleList::~nsStyleList()
 {
   MOZ_COUNT_DTOR(nsStyleList);
 }
 
 nsStyleList::nsStyleList(const nsStyleList& aSource)
   : mListStylePosition(aSource.mListStylePosition)
   , mListStyleImage(aSource.mListStyleImage)
-  , mListStyleType(aSource.mListStyleType)
   , mCounterStyle(aSource.mCounterStyle)
   , mQuotes(aSource.mQuotes)
   , mImageRegion(aSource.mImageRegion)
 {
   MOZ_COUNT_CTOR(nsStyleList);
 }
 
 void
 nsStyleList::FinishStyle(nsPresContext* aPresContext)
 {
   MOZ_ASSERT(NS_IsMainThread());
   MOZ_ASSERT(aPresContext->StyleSet()->IsServo());
 
   if (mListStyleImage && !mListStyleImage->IsResolved()) {
     mListStyleImage->Resolve(aPresContext);
   }
-  if (mListStyleType) {
-    MOZ_ASSERT(!mCounterStyle);
-    mCounterStyle = aPresContext->
-      CounterStyleManager()->BuildCounterStyle(mListStyleType);
-    mListStyleType = nullptr;
-  }
+  mCounterStyle.Resolve(aPresContext->CounterStyleManager());
 }
 
 void
 nsStyleList::SetQuotesInherit(const nsStyleList* aOther)
 {
   mQuotes = aOther->mQuotes;
 }
 
@@ -704,18 +698,17 @@ nsStyleList::CalcDifference(const nsStyl
       (mQuotes || aNewData.mQuotes) &&
       GetQuotePairs() != aNewData.GetQuotePairs()) {
     return nsChangeHint_ReconstructFrame;
   }
   if (mListStylePosition != aNewData.mListStylePosition) {
     return nsChangeHint_ReconstructFrame;
   }
   if (DefinitelyEqualImages(mListStyleImage, aNewData.mListStyleImage) &&
-      (mCounterStyle == aNewData.mCounterStyle ||
-       mListStyleType != aNewData.mListStyleType)) {
+      mCounterStyle == aNewData.mCounterStyle) {
     if (mImageRegion.IsEqualInterior(aNewData.mImageRegion)) {
       return nsChangeHint(0);
     }
     if (mImageRegion.width == aNewData.mImageRegion.width &&
         mImageRegion.height == aNewData.mImageRegion.height) {
       return NS_STYLE_HINT_VISUAL;
     }
   }
@@ -3792,18 +3785,17 @@ nsStyleContentData::nsStyleContentData(c
 }
 
 bool
 nsStyleContentData::
 CounterFunction::operator==(const CounterFunction& aOther) const
 {
   return mIdent == aOther.mIdent &&
     mSeparator == aOther.mSeparator &&
-    mCounterStyle == aOther.mCounterStyle &&
-    mCounterStyleName == aOther.mCounterStyleName;
+    mCounterStyle == aOther.mCounterStyle;
 }
 
 nsStyleContentData&
 nsStyleContentData::operator=(const nsStyleContentData& aOther)
 {
   if (this == &aOther) {
     return *this;
   }
@@ -3835,23 +3827,18 @@ nsStyleContentData::Resolve(nsPresContex
   switch (mType) {
     case eStyleContentType_Image:
       if (!mContent.mImage->IsResolved()) {
         mContent.mImage->Resolve(aPresContext);
       }
       break;
     case eStyleContentType_Counter:
     case eStyleContentType_Counters: {
-      CounterFunction* counters = mContent.mCounters;
-      if (counters->mCounterStyleName) {
-        MOZ_ASSERT(!counters->mCounterStyle);
-        counters->mCounterStyle = aPresContext->CounterStyleManager()->
-          BuildCounterStyle(counters->mCounterStyleName);
-        counters->mCounterStyleName = nullptr;
-      }
+      mContent.mCounters->
+        mCounterStyle.Resolve(aPresContext->CounterStyleManager());
       break;
     }
     default:
       break;
   }
 }
 
 
--- a/layout/style/nsStyleStruct.h
+++ b/layout/style/nsStyleStruct.h
@@ -1463,45 +1463,26 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsSt
 
   imgRequestProxy* GetListStyleImage() const
   {
     return mListStyleImage ? mListStyleImage->get() : nullptr;
   }
 
   already_AddRefed<nsIURI> GetListStyleImageURI() const;
 
-  // The following two methods are called from Servo code to maintain
-  // list-style-type off main thread.
-  void SetListStyleType(nsIAtom* aType)
-  {
-    mListStyleType = aType;
-    mCounterStyle = nullptr;
-  }
-  void CopyListStyleTypeFrom(const nsStyleList& aOther)
-  {
-    mListStyleType = aOther.mListStyleType;
-    mCounterStyle = aOther.mCounterStyle;
-  }
-
   const nsStyleQuoteValues::QuotePairArray& GetQuotePairs() const;
 
   void SetQuotesInherit(const nsStyleList* aOther);
   void SetQuotesInitial();
   void SetQuotesNone();
   void SetQuotes(nsStyleQuoteValues::QuotePairArray&& aValues);
 
   uint8_t mListStylePosition;                  // [inherited]
   RefPtr<nsStyleImageRequest> mListStyleImage; // [inherited]
 
-  // mCounterStyle is the actual field for computed list-style-type.
-  // mListStyleType is only used when we are off the main thread, so we
-  // cannot safely construct CounterStyle object. FinishStyle() will
-  // use it to setup mCounterStyle and then clear it. At any time, only
-  // one of the following two fields should be non-null.
-  nsCOMPtr<nsIAtom> mListStyleType;
   mozilla::CounterStylePtr mCounterStyle;      // [inherited]
 
 private:
   RefPtr<nsStyleQuoteValues> mQuotes;   // [inherited]
   nsStyleList& operator=(const nsStyleList& aOther) = delete;
 public:
   nsRect        mImageRegion;           // [inherited] the rect to use within an image
 
@@ -3043,36 +3024,33 @@ public:
     return mContent.mString;
   }
 
   struct CounterFunction
   {
     nsString mIdent;
     // This is only used when it is a counters() function.
     nsString mSeparator;
-    // One and only one of mCounterStyle and mCounterStyleName must be
-    // non-null at any time.
     mozilla::CounterStylePtr mCounterStyle;
-    nsCOMPtr<nsIAtom> mCounterStyleName;
 
     NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CounterFunction)
 
     bool operator==(const CounterFunction& aOther) const;
     bool operator!=(const CounterFunction& aOther) const {
       return !(*this == aOther);
     }
   private:
     ~CounterFunction() {}
   };
 
   CounterFunction* GetCounters() const
   {
     MOZ_ASSERT(mType == eStyleContentType_Counter ||
                mType == eStyleContentType_Counters);
-    MOZ_ASSERT(mContent.mCounters->mCounterStyle,
+    MOZ_ASSERT(mContent.mCounters->mCounterStyle.IsResolved(),
                "Counter style should have been resolved");
     return mContent.mCounters;
   }
 
   nsStyleImageRequest* GetImageRequest() const
   {
     MOZ_ASSERT(mType == eStyleContentType_Image);
     return mContent.mImage;
--- a/layout/style/test/stylo-failures.md
+++ b/layout/style/test/stylo-failures.md
@@ -48,20 +48,16 @@ to mochitest command.
 * console support bug 1352669
   * test_bug413958.html `monitorConsole` [3]
   * test_parser_diagnostics_unprintables.html [550]
 * Transition support:
   * test_transitions.html: pseudo elements [4]
   * test_transitions_and_reframes.html `pseudo-element`: bug 1366422 [4]
   * Events:
     * test_animations_event_order.html [2]
-* symbols() function and string value on list-style-type bug 1363596
-  * test_value_storage.html `symbols(` [30]
-  * ... `list-style-type` [8]
-  * ... `'list-style'` [18]
 * Unimplemented \@font-face descriptors:
   * test_font_face_parser.html `font-language-override`: bug 1355364 [8]
 * keyword values should be preserved in \@font-face bug 1355368
   * test_font_face_parser.html `font-weight` [4]
   * test_font_loading_api.html `weight` [1]
 * @namespace support:
   * test_namespace_rule.html: bug 1355715 [6]
 * test_dont_use_document_colors.html: support of disabling document color bug 1355716 [21]
--- a/layout/tools/reftest/reftest.jsm
+++ b/layout/tools/reftest/reftest.jsm
@@ -710,17 +710,17 @@ function BuildConditionSandbox(aURL) {
 
 #if MOZ_WEBRTC
     sandbox.webrtc = true;
 #else
     sandbox.webrtc = false;
 #endif
 
 #ifdef MOZ_STYLO
-    sandbox.stylo = prefs.getBoolPref("layout.css.servo.enabled", false);
+    sandbox.stylo = prefs.getBoolPref("layout.css.servo.enabled", false) && !gCompareStyloToGecko;
     sandbox.styloVsGecko = gCompareStyloToGecko;
 #else
     sandbox.stylo = false;
     sandbox.styloVsGecko = false;
 #endif
 
 #ifdef RELEASE_OR_BETA
     sandbox.release_or_beta = true;
--- a/mobile/android/app/mobile.js
+++ b/mobile/android/app/mobile.js
@@ -409,16 +409,25 @@ pref("browser.ui.zoom.force-user-scalabl
 // When removing this Nightly flag, also remember to remove the flags surrounding this feature
 // in GeckoPreferences and BrowserApp (see bug 1245930).
 #ifdef NIGHTLY_BUILD
 pref("ui.bookmark.mobilefolder.enabled", true);
 #else
 pref("ui.bookmark.mobilefolder.enabled", false);
 #endif
 
+#if MOZ_UPDATE_CHANNEL == nightly
+pref("mma.enabled", true);
+#elif MOZ_UPDATE_CHANNEL == beta
+pref("mma.enabled", true);
+#else
+pref("mma.enabled", true);
+#endif
+
+
 pref("ui.touch.radius.enabled", false);
 pref("ui.touch.radius.leftmm", 3);
 pref("ui.touch.radius.topmm", 5);
 pref("ui.touch.radius.rightmm", 3);
 pref("ui.touch.radius.bottommm", 2);
 pref("ui.touch.radius.visitedWeight", 120);
 
 pref("ui.mouse.radius.enabled", false);
--- a/mobile/android/base/java/org/mozilla/gecko/mma/MmaDelegate.java
+++ b/mobile/android/base/java/org/mozilla/gecko/mma/MmaDelegate.java
@@ -5,23 +5,45 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 package org.mozilla.gecko.mma;
 
 import android.app.Application;
 import android.content.Context;
 
 import org.mozilla.gecko.MmaConstants;
+import org.mozilla.gecko.PrefsHelper;
 
 
 public class MmaDelegate {
 
+    private static final String ENABLE_PREF = "mma.enabled";
+
     private static MmaInterface mmaHelper = MmaConstants.getMma();
 
+    private static final String[] prefs = { ENABLE_PREF };
+
+
     public static void init(Application application) {
-        mmaHelper.init(application);
+        setupPrefHandler(application);
+    }
+
+    public static void stop() {
+        mmaHelper.stop();
     }
 
-    public void start(Context context) {
-        mmaHelper.start(context);
+    private static void setupPrefHandler(final Application application) {
+        PrefsHelper.PrefHandler handler = new PrefsHelper.PrefHandlerBase() {
+            @Override
+            public void prefValue(String pref, boolean value) {
+                if (pref.equals(ENABLE_PREF)) {
+                    if (value) {
+                        mmaHelper.init(application);
+                    } else {
+                        mmaHelper.stop();
+                    }
+
+                }
+            }
+        };
+        PrefsHelper.addObserver(prefs, handler);
     }
-
 }
--- a/mobile/android/base/java/org/mozilla/gecko/mma/MmaInterface.java
+++ b/mobile/android/base/java/org/mozilla/gecko/mma/MmaInterface.java
@@ -14,9 +14,10 @@ public interface MmaInterface {
     void init(Application application);
 
     void start(Context context);
 
     void track(String leanplumEvent);
 
     void track(String leanplumEvent, double value);
 
+    void stop();
 }
--- a/mobile/android/base/java/org/mozilla/gecko/mma/MmaLeanplumImp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/mma/MmaLeanplumImp.java
@@ -44,9 +44,14 @@ public class MmaLeanplumImp implements M
 
     }
 
     @Override
     public void track(String leanplumEvent, double value) {
         Leanplum.track(leanplumEvent, value);
 
     }
+
+    @Override
+    public void stop() {
+        Leanplum.stop();
+    }
 }
--- a/mobile/android/base/java/org/mozilla/gecko/mma/MmaStubImp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/mma/MmaStubImp.java
@@ -25,9 +25,14 @@ public class MmaStubImp implements MmaIn
     public void track(String leanplumEvent) {
 
     }
 
     @Override
     public void track(String leanplumEvent, double value) {
 
     }
+
+    @Override
+    public void stop() {
+
+    }
 }
--- a/mobile/android/base/java/org/mozilla/gecko/preferences/GeckoPreferences.java
+++ b/mobile/android/base/java/org/mozilla/gecko/preferences/GeckoPreferences.java
@@ -25,16 +25,17 @@ import org.mozilla.gecko.R;
 import org.mozilla.gecko.SnackbarBuilder;
 import org.mozilla.gecko.Telemetry;
 import org.mozilla.gecko.TelemetryContract;
 import org.mozilla.gecko.TelemetryContract.Method;
 import org.mozilla.gecko.activitystream.ActivityStream;
 import org.mozilla.gecko.db.BrowserContract.SuggestedSites;
 import org.mozilla.gecko.feeds.FeedService;
 import org.mozilla.gecko.feeds.action.CheckForUpdatesAction;
+import org.mozilla.gecko.mma.MmaDelegate;
 import org.mozilla.gecko.permissions.Permissions;
 import org.mozilla.gecko.restrictions.Restrictable;
 import org.mozilla.gecko.restrictions.Restrictions;
 import org.mozilla.gecko.tabqueue.TabQueueHelper;
 import org.mozilla.gecko.tabqueue.TabQueuePrompt;
 import org.mozilla.gecko.updater.UpdateService;
 import org.mozilla.gecko.updater.UpdateServiceHelper;
 import org.mozilla.gecko.util.BundleEventListener;
@@ -1192,16 +1193,19 @@ public class GeckoPreferences
             setCharEncodingState(((String) newValue).equals("true"));
         } else if (PREFS_UPDATER_AUTODOWNLOAD.equals(prefName)) {
             UpdateServiceHelper.setAutoDownloadPolicy(this, UpdateService.AutoDownloadPolicy.get((String) newValue));
         } else if (PREFS_UPDATER_URL.equals(prefName)) {
             UpdateServiceHelper.setUpdateUrl(this, (String) newValue);
         } else if (PREFS_HEALTHREPORT_UPLOAD_ENABLED.equals(prefName)) {
             final Boolean newBooleanValue = (Boolean) newValue;
             AdjustConstants.getAdjustHelper().setEnabled(newBooleanValue);
+            if (!newBooleanValue) {
+                MmaDelegate.stop();
+            }
         } else if (PREFS_GEO_REPORTING.equals(prefName)) {
             if ((Boolean) newValue) {
                 enableStumbler((CheckBoxPreference) preference);
                 return false;
             } else {
                 broadcastStumblerPref(GeckoPreferences.this, false);
                 return true;
             }
--- a/mobile/android/thirdparty/com/leanplum/Leanplum.java
+++ b/mobile/android/thirdparty/com/leanplum/Leanplum.java
@@ -1016,17 +1016,17 @@ public class Leanplum {
   private static void resumeHeartbeat() {
     startHeartbeat();
   }
 
   /**
    * Call this to explicitly end the session. This should not be used in most cases, so we won't
    * make it public for now.
    */
-  static void stop() {
+  public static void stop() {
     if (Constants.isNoop()) {
       return;
     }
     if (!LeanplumInternal.hasCalledStart()) {
       Log.e("You cannot call stop before calling start");
       return;
     }
 
--- a/servo/Cargo.lock
+++ b/servo/Cargo.lock
@@ -306,17 +306,17 @@ dependencies = [
  "azure 0.15.0 (git+https://github.com/servo/rust-azure)",
  "canvas_traits 0.0.1",
  "cssparser 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
- "offscreen_gl_context 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.8.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo_config 0.0.1",
  "webrender_traits 0.39.0 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
 name = "canvas_traits"
 version = "0.0.1"
 dependencies = [
@@ -468,17 +468,17 @@ dependencies = [
  "gfx_traits 0.0.1",
  "ipc-channel 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "itertools 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "layout_traits 0.0.1",
  "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net 0.0.1",
  "net_traits 0.0.1",
- "offscreen_gl_context 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.8.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "profile_traits 0.0.1",
  "script_traits 0.0.1",
  "serde 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_derive 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo_config 0.0.1",
  "servo_rand 0.0.1",
  "servo_remutex 0.0.1",
  "servo_url 0.0.1",
@@ -1168,25 +1168,24 @@ source = "registry+https://github.com/ru
 dependencies = [
  "cmake 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
  "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "html5ever"
-version = "0.16.0"
+version = "0.17.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "markup5ever 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "markup5ever 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
  "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)",
- "tendril 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "httparse"
 version = "1.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -1380,17 +1379,17 @@ dependencies = [
  "bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "canvas_traits 0.0.1",
  "cssparser 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx 0.0.1",
  "gfx_traits 0.0.1",
  "heapsize 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "html5ever 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "html5ever 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
  "ordered-float 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "parking_lot 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "profile_traits 0.0.1",
@@ -1495,27 +1494,16 @@ dependencies = [
 
 [[package]]
 name = "libc"
 version = "0.2.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "libloading"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "target_build_utils 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "libloading"
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -1590,27 +1578,27 @@ name = "malloc_buf"
 version = "0.0.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "markup5ever"
-version = "0.1.0"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "heapsize 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)",
  "phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
  "string_cache 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "string_cache_codegen 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "tendril 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tendril 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "matches"
 version = "0.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -1898,28 +1886,28 @@ dependencies = [
 
 [[package]]
 name = "odds"
 version = "0.2.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "offscreen_gl_context"
-version = "0.8.6"
+version = "0.8.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cgl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "gl_generator 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "libloading 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libloading 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)",
  "user32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "x11 2.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -2336,32 +2324,32 @@ dependencies = [
  "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx_traits 0.0.1",
  "gleam 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "half 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "html5ever 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "html5ever 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper 0.10.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper_serde 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "image 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "js 0.1.4 (git+https://github.com/servo/rust-mozjs)",
  "jstraceable_derive 0.0.1",
  "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "mime 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "mime_guess 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
  "num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
- "offscreen_gl_context 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.8.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "open 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "parking_lot 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)",
  "phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)",
  "phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)",
  "profile_traits 0.0.1",
  "range 0.0.1",
  "ref_filter_map 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2385,32 +2373,32 @@ dependencies = [
  "time 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
  "tinyfiledialogs 2.5.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-segmentation 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "uuid 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "webrender_traits 0.39.0 (git+https://github.com/servo/webrender)",
  "webvr 0.0.1",
  "webvr_traits 0.0.1",
- "xml5ever 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "xml5ever 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "script_layout_interface"
 version = "0.0.1"
 dependencies = [
  "app_units 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "atomic_refcell 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "canvas_traits 0.0.1",
  "cssparser 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "gfx_traits 0.0.1",
  "heapsize 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "html5ever 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "html5ever 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
  "profile_traits 0.0.1",
  "range 0.0.1",
  "script_traits 0.0.1",
@@ -2447,17 +2435,17 @@ dependencies = [
  "heapsize 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper 0.10.10 (registry+https://github.com/rust-lang/crates.io-index)",
  "hyper_serde 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
  "msg 0.0.1",
  "net_traits 0.0.1",
- "offscreen_gl_context 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.8.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "profile_traits 0.0.1",
  "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_derive 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo_url 0.0.1",
  "style_traits 0.0.1",
  "time 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2841,17 +2829,17 @@ dependencies = [
  "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "cssparser 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "html5ever 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "html5ever 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "itoa 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "nsstring_vendor 0.1.0",
  "num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2890,17 +2878,17 @@ dependencies = [
 [[package]]
 name = "style_tests"
 version = "0.0.1"
 dependencies = [
  "app_units 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "cssparser 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "html5ever 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "html5ever 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "parking_lot 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "rayon 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
  "selectors 0.19.0",
  "servo_atoms 0.0.1",
  "servo_config 0.0.1",
  "servo_url 0.0.1",
  "size_of_test 0.0.1",
@@ -3011,49 +2999,38 @@ dependencies = [
  "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)",
  "syntex_errors 0.58.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "syntex_pos 0.58.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
-name = "target_build_utils"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)",
- "phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 0.9.10 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
 name = "task_info"
 version = "0.0.1"
 dependencies = [
  "gcc 0.3.47 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "tempdir"
 version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "tendril"
-version = "0.2.4"
+version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
  "futf 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "utf-8 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf-8 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "term"
 version = "0.4.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3218,17 +3195,17 @@ version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "utf-8"
-version = "0.6.0"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "utf8-ranges"
 version = "1.0.0"
@@ -3316,17 +3293,17 @@ dependencies = [
  "euclid 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "freetype 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "gamma-lut 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
- "offscreen_gl_context 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.8.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "plane-split 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "rayon 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "thread_profiler 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
  "webrender_traits 0.39.0 (git+https://github.com/servo/webrender)",
 ]
 
 [[package]]
@@ -3339,17 +3316,17 @@ dependencies = [
  "byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-foundation 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "core-graphics 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "dwrote 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "gleam 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "heapsize 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "ipc-channel 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "offscreen_gl_context 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "offscreen_gl_context 0.8.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_derive 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "webvr"
 version = "0.0.1"
@@ -3431,23 +3408,22 @@ name = "xml-rs"
 version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "bitflags 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "xml5ever"
-version = "0.6.0"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "markup5ever 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "tendril 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "markup5ever 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [metadata]
 "checksum adler32 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ff33fe13a08dbce05bcefa2c68eea4844941437e33d6f808240b54d7157b9cd"
 "checksum aho-corasick 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "500909c4f87a9e52355b26626d890833e9e1d53ac566db76c36faa984b889699"
 "checksum alloc-no-stdlib 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b21f6ad9c9957eb5d70c3dee16d31c092b3cab339628f821766b05e6833d72b8"
 "checksum android_glue 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d8289e9637439939cc92b1995b0972117905be88bc28116c86b64d6e589bcd38"
@@ -3544,17 +3520,17 @@ dependencies = [
 "checksum glob 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb"
 "checksum glx 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b280007fa9c7442cfd1e0b1addb8d1a59240267110e8705f8f7e2c7bfb7e2f72"
 "checksum half 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "63d68db75012a85555434ee079e7e6337931f87a087ab2988becbadf64673a7f"
 "checksum harfbuzz-sys 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "3072efe30deebdda55fcbe7c74c6d42f546fd8533488e43a692ea940ecface11"
 "checksum heapsize 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "556cd479866cf85c3f671209c85e8a6990211c916d1002c2fcb2e9b7cf60bc36"
 "checksum heapsize_derive 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "46f96d52fb1564059fc97b85ef6165728cc30198ab60073bf114c66c4c89bb5d"
 "checksum heartbeats-simple 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9ad003ce233955e9d95f2c69cde84e68302ba9ba4a673d351c9bff93c738aadc"
 "checksum heartbeats-simple-sys 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e1a408c0011427cc0e0049f7861c70377819aedfc006e8c901b1c70fd98fb1a4"
-"checksum html5ever 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = "83d2f9d3abeac56d8b4de9fd033473f6183b89ea91e635326b2807b6a14e98b9"
+"checksum html5ever 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5458ad531a451b8b046d5f2f00ba2a8594cf8affe3ba5fc86ae3d7575a23a243"
 "checksum httparse 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a6e7a63e511f9edffbab707141fbb8707d1a3098615fb2adbd5769cdfcc9b17d"
 "checksum hyper 0.10.10 (registry+https://github.com/rust-lang/crates.io-index)" = "36e108e0b1fa2d17491cbaac4bc460dc0956029d10ccf83c913dd0e5db3e7f07"
 "checksum hyper-openssl 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "85a372eb692590b3fe014c196c30f9f52d4c42f58cd49dd94caeee1593c9cc37"
 "checksum hyper_serde 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a43d985c58afed6b59991932e1d9b5f2629472849f0062c0078d82fdc0b788bb"
 "checksum idna 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2233d4940b1f19f0418c158509cd7396b8d70a5db5705ce410914dc8fa603b37"
 "checksum image 0.12.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d95816db758249fe16f23a4e23f1a3a817fe11892dbfd1c5836f625324702158"
 "checksum immeta 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0b9260463a221bfe3f02100c56e2d14c050d5ffe7e44a43d0a1b2b1f2b523502"
 "checksum inflate 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e7e0062d2dc2f17d2f13750d95316ae8a2ff909af0fda957084f5defd87c43bb"
@@ -3568,24 +3544,23 @@ dependencies = [
 "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
 "checksum khronos_api 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "09c9d3760673c427d46f91a0350f0a84a52e6bc5a84adf26dc610b6c52436630"
 "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a"
 "checksum lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3b37545ab726dd833ec6420aaba8231c5b320814b9029ad585555d2a03e94fbf"
 "checksum lazycell 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce12306c4739d86ee97c23139f3a34ddf0387bbf181bc7929d287025a8c3ef6b"
 "checksum leak 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bd100e01f1154f2908dfa7d02219aeab25d0b9c7fa955164192e3245255a0c73"
 "checksum leaky-cow 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "40a8225d44241fd324a8af2806ba635fc7c8a7e9a7de4d5cf3ef54e71f5926fc"
 "checksum libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)" = "e7eb6b826bfc1fdea7935d46556250d1799b7fe2d9f7951071f4291710665e3e"
-"checksum libloading 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fd1835a714c1f67ba073a493493c23686a480e2614e208c921834808b1f19d8f"
 "checksum libloading 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "be99f814beb3e9503a786a592c909692bb6d4fc5a695f6ed7987223acfbd5194"
 "checksum libz-sys 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e5ee912a45d686d393d5ac87fac15ba0ba18daae14e8e7543c63ebf7fb7e970c"
 "checksum log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "880f77541efa6e5cc74e76910c9884d9859683118839d6a1dc3b11e63512565b"
 "checksum lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d947cbb889ed21c2a84be6ffbaebf5b4e0f4340638cba0444907e38b56be084"
 "checksum mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
 "checksum malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
-"checksum markup5ever 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a614f301a2d5583894d1915a8c6bd2c473e80fba69263a60cf2677dbc49936f8"
+"checksum markup5ever 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b20f40b249337f941a47963e45851911b395a54947be7f05a997715cd43efb97"
 "checksum matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "efd7622e3022e1a6eaa602c4cea8912254e5582c9c692e9167714182244801b1"
 "checksum memchr 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1dbccc0e46f1ea47b9f17e6d67c5a96bd27030519c519c9c91327e31275a47b4"
 "checksum metadeps 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "829fffe7ea1d747e23f64be972991bc516b2f1ac2ae4a3b33d8bea150c410151"
 "checksum mime 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9d69889cdc6336ed56b174514ce876c4c3dc564cc23dd872e7bca589bb2a36c8"
 "checksum mime_guess 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76da6df85047af8c0edfa53f48eb1073012ce1cc95c8fedc0a374f659a89dd65"
 "checksum miniz-sys 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "28eaee17666671fa872e567547e8428e83308ebe5808cdf6a0e28397dbe2c726"
 "checksum mio 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6d19442734abd7d780b981c590c325680d933e99795fe1f693f0686c9ed48022"
 "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
@@ -3598,17 +3573,17 @@ dependencies = [
 "checksum nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b8c256fd9471521bcb84c3cdba98921497f1a331cbc15b8030fc63b82050ce"
 "checksum num-integer 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "ef1a4bf6f9174aa5783a9b4cc892cacd11aebad6c69ad027a0b65c6ca5f8aa37"
 "checksum num-iter 0.1.33 (registry+https://github.com/rust-lang/crates.io-index)" = "f7d1891bd7b936f12349b7d1403761c8a0b85a18b148e9da4429d5d102c1a41e"
 "checksum num-rational 0.1.36 (registry+https://github.com/rust-lang/crates.io-index)" = "c2dc5ea04020a8f18318ae485c751f8cfa1c0e69dcf465c29ddaaa64a313cc44"
 "checksum num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "e1cbfa3781f3fe73dc05321bed52a06d2d491eaa764c52335cf4399f046ece99"
 "checksum num_cpus 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca313f1862c7ec3e0dfe8ace9fa91b1d9cb5c84ace3d00f5ec4216238e93c167"
 "checksum objc 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "877f30f37acef6749b1841cceab289707f211aecfc756553cd63976190e6cc2e"
 "checksum odds 0.2.25 (registry+https://github.com/rust-lang/crates.io-index)" = "c3df9b730298cea3a1c3faa90b7e2f9df3a9c400d0936d6015e6165734eefcba"
-"checksum offscreen_gl_context 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)" = "ce00d0caf8994f97a07be58dbd1c4d1e05904039d9ddb9286ca6ab144ea570b1"
+"checksum offscreen_gl_context 0.8.9 (registry+https://github.com/rust-lang/crates.io-index)" = "3cadec7378139fd7e48badba0d59cbb6312c7e0eca9b5e3b8ec7a78fc0c6cb28"
 "checksum ogg 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "013b78ceb7fb82555a2f8a95d8e40866fe64a5d15b83c51b3e1fdd40cd903ed3"
 "checksum ogg_metadata 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1753e64956b3afd900f788bf6d2e9d0986df39168be86f4b47ec2058d0c2f7"
 "checksum open 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3478ed1686bd1300c8a981a940abc92b06fac9cbef747f4c668d4e032ff7b842"
 "checksum openssl 0.9.12 (registry+https://github.com/rust-lang/crates.io-index)" = "bb5d1663b73d10c6a3eda53e2e9d0346f822394e7b858d7257718f65f61dfbe2"
 "checksum openssl-sys 0.9.12 (registry+https://github.com/rust-lang/crates.io-index)" = "3a5886d87d3e2a0d890bf62dc8944f5e3769a405f7e1e9ef6e517e47fd7a0897"
 "checksum ordered-float 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "da12c96037889ae0be29dd2bdd260e5a62a7df24e6466d5a15bb8131c1c200a8"
 "checksum osmesa-src 12.0.1 (git+https://github.com/servo/osmesa-src)" = "<none>"
 "checksum osmesa-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b"
@@ -3674,19 +3649,18 @@ dependencies = [
 "checksum swapper 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3ca610b32bb8bfc5e7f705480c3a1edfeb70b6582495d343872c8bee0dcf758c"
 "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"
 "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6"
 "checksum synstructure 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "cf318c34a2f8381a4f3d4db2c91b45bca2b1cd8cbe56caced900647be164800c"
 "checksum syntex 0.58.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a8f5e3aaa79319573d19938ea38d068056b826db9883a5d47f86c1cecc688f0e"
 "checksum syntex_errors 0.58.1 (registry+https://github.com/rust-lang/crates.io-index)" = "867cc5c2d7140ae7eaad2ae9e8bf39cb18a67ca651b7834f88d46ca98faadb9c"
 "checksum syntex_pos 0.58.1 (registry+https://github.com/rust-lang/crates.io-index)" = "13ad4762fe52abc9f4008e85c4fb1b1fe3aa91ccb99ff4826a439c7c598e1047"
 "checksum syntex_syntax 0.58.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6e0e4dbae163dd98989464c23dd503161b338790640e11537686f2ef0f25c791"
-"checksum target_build_utils 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f42dc058080c19c6a58bdd1bf962904ee4f5ef1fe2a81b529f31dacc750c679f"
 "checksum tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6"
-"checksum tendril 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4ce04c250d202db8004921e3d3bc95eaa4f2126c6937a428ae39d12d0e38df62"
+"checksum tendril 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "01576be96a211e017bf90b1603b1272baf9fe93a1bf9b4845257c4ba09c9b25f"
 "checksum term 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d168af3930b369cfe245132550579d47dfd873d69470755a19c2c6568dbbd989"
 "checksum term_size 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "07b6c1ac5b3fffd75073276bca1ceed01f67a28537097a2a9539e116e50fb21a"
 "checksum thread-id 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8df7875b676fddfadffd96deea3b1124e5ede707d4884248931077518cf1f773"
 "checksum thread_local 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c85048c6260d17cf486ceae3282d9fb6b90be220bf5b28c400f5485ffc29f0c7"
 "checksum thread_profiler 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5920e77802b177479ab5795767fa48e68f61b2f516c2ac0041e2978dd8efe483"
 "checksum threadpool 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "59f6d3eff89920113dac9db44dde461d71d01e88a5b57b258a0466c32b5d7fe1"
 "checksum time 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "ffd7ccbf969a892bf83f1e441126968a07a3941c24ff522a26af9f9f4585d1a3"
 "checksum tinyfiledialogs 2.5.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1d401358cd71aca93d5f4fccd3db5b87d970ae70fe457911929d99f4a87f7531"
@@ -3700,17 +3674,17 @@ dependencies = [
 "checksum unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e5430ae21ef212551680d0021fc7dbd936e8b268c5ea8fdae8814e0b2496d80f"
 "checksum unicode-segmentation 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a8083c594e02b8ae1654ae26f0ade5158b119bd88ad0e8227a5d8fcd72407946"
 "checksum unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "bf3a113775714a22dcb774d8ea3655c53a32debae63a063acc00a91cc586245f"
 "checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc"
 "checksum unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1f2ae5ddb18e1c92664717616dd9549dde73f539f01bd7b77c2edb2446bdff91"
 "checksum url 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f5ba8a749fb4479b043733416c244fa9d1d3af3d7c23804944651c8a448cb87e"
 "checksum url_serde 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "64ddbc0a67ae30778179166934129e0aeb92c5b7051d8e0b519e3bce73aff106"
 "checksum user32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4ef4711d107b21b410a3a974b1204d9accc8b10dad75d8324b5d755de1617d47"
-"checksum utf-8 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9aee9ba280438b56d1ebc5329f2094f0ff457f811eeeff0b278d75aa99db400"
+"checksum utf-8 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b6f923c601c7ac48ef1d66f7d5b5b2d9a7ba9c51333ab75a3ddf8d0309185a56"
 "checksum utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122"
 "checksum uuid 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7cfec50b0842181ba6e713151b72f4ec84a6a7e2c9c8a8a3ffc37bb1cd16b231"
 "checksum vec_map 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cac5efe5cb0fa14ec2f84f83c701c562ee63f6dcc680861b21d65c682adfb05f"
 "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
 "checksum walkdir 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "bb08f9e670fab86099470b97cd2b252d6527f0b3cc1401acdb595ffc9dd288ff"
 "checksum webdriver 0.22.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d548aabf87411b1b4ba91fd07eacd8b238135c7131a452b8a9f6386209167e18"
 "checksum webrender 0.39.0 (git+https://github.com/servo/webrender)" = "<none>"
 "checksum webrender_traits 0.39.0 (git+https://github.com/servo/webrender)" = "<none>"
@@ -3718,9 +3692,9 @@ dependencies = [
 "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
 "checksum ws 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "04614a58714f3fd4a8b1da4bcae9f031c532d35988c3d39627619248113f8be8"
 "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
 "checksum x11 2.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db27c597c187da52194a4b8232e7d869503911aab9ff726fefb76d7a830f78ed"
 "checksum x11-dl 2.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "326c500cdc166fd7c70dd8c8a829cd5c0ce7be5a5d98c25817de2b9bdc67faf8"
 "checksum xdg 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a66b7c2281ebde13cf4391d70d4c7e5946c3c25e72a7b859ca8f677dcd0b0c61"
 "checksum xi-unicode 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "12ea8eda4b1eb72f02d148402e23832d56a33f55d8c1b2d5bcdde91d79d47cb1"
 "checksum xml-rs 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f2b15eed12692bd59d15e98ee7f8dc8408465b992d8ddb4d1672c24865132ec7"
-"checksum xml5ever 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b5bbbde15cfe438463d4e48dc0c752e427a29766d144e3304594ad0c5813cbf9"
+"checksum xml5ever 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b556f07ec35053061ffa5a1b13468ed6a877a7563756719588fbe0623ee52939"
--- a/servo/components/layout/Cargo.toml
+++ b/servo/components/layout/Cargo.toml
@@ -15,17 +15,17 @@ atomic_refcell = "0.1"
 bitflags = "0.7"
 canvas_traits = {path = "../canvas_traits"}
 cssparser = "0.13.3"
 euclid = "0.11"
 fnv = "1.0"
 gfx = {path = "../gfx"}
 gfx_traits = {path = "../gfx_traits"}
 heapsize = "0.3.0"
-html5ever = "0.16"
+html5ever = "0.17"
 ipc-channel = "0.7"
 libc = "0.2"
 log = "0.3.5"
 msg = {path = "../msg"}
 net_traits = {path = "../net_traits"}
 ordered-float = "0.4"
 parking_lot = "0.3.3"
 profile_traits = {path = "../profile_traits"}
--- a/servo/components/layout/display_list_builder.rs
+++ b/servo/components/layout/display_list_builder.rs
@@ -43,29 +43,30 @@ use servo_config::opts;
 use servo_geometry::max_rect;
 use servo_url::ServoUrl;
 use std::{cmp, f32};
 use std::collections::HashMap;
 use std::default::Default;
 use std::mem;
 use std::sync::Arc;
 use style::computed_values::{background_attachment, background_clip, background_origin};
-use style::computed_values::{background_repeat, background_size, border_style, cursor};
+use style::computed_values::{background_repeat, border_style, cursor};
 use style::computed_values::{image_rendering, overflow_x, pointer_events, position, visibility};
 use style::computed_values::filter::Filter;
 use style::computed_values::text_shadow::TextShadow;
 use style::logical_geometry::{LogicalPoint, LogicalRect, LogicalSize, WritingMode};
 use style::properties::{self, ServoComputedValues};
 use style::properties::longhands::border_image_repeat::computed_value::RepeatKeyword;
 use style::properties::style_structs;
 use style::servo::restyle_damage::REPAINT;
 use style::values::{Either, RGBA};
 use style::values::computed::{Gradient, GradientItem, LengthOrPercentage};
 use style::values::computed::{LengthOrPercentageOrAuto, NumberOrPercentage, Position};
 use style::values::computed::image::{EndingShape, LineDirection};
+use style::values::generics::background::BackgroundSize;
 use style::values::generics::image::{Circle, Ellipse, EndingShape as GenericEndingShape};
 use style::values::generics::image::{GradientItem as GenericGradientItem, GradientKind};
 use style::values::generics::image::{Image, ShapeExtent};
 use style::values::specified::position::{X, Y};
 use style_traits::CSSPixel;
 use style_traits::cursor::Cursor;
 use table_cell::CollapsedBordersForCell;
 use webrender_helpers::{ToMixBlendMode, ToTransformStyle};
@@ -912,53 +913,39 @@ impl FragmentDisplayListBuilding for Fra
         // If `image_aspect_ratio` < `bounds_aspect_ratio`, the image is tall; otherwise, it is
         // wide.
         let image_aspect_ratio = (image.width as f64) / (image.height as f64);
         let bounds_aspect_ratio = bounds.size.width.to_f64_px() / bounds.size.height.to_f64_px();
         let intrinsic_size = Size2D::new(Au::from_px(image.width as i32),
                                          Au::from_px(image.height as i32));
         let background_size = get_cyclic(&style.get_background().background_size.0, index).clone();
         match (background_size, image_aspect_ratio < bounds_aspect_ratio) {
-            (background_size::single_value::T::Contain, false) |
-            (background_size::single_value::T::Cover, true) => {
+            (BackgroundSize::Contain, false) | (BackgroundSize::Cover, true) => {
                 Size2D::new(bounds.size.width,
                             Au::from_f64_px(bounds.size.width.to_f64_px() / image_aspect_ratio))
             }
 
-            (background_size::single_value::T::Contain, true) |
-            (background_size::single_value::T::Cover, false) => {
+            (BackgroundSize::Contain, true) | (BackgroundSize::Cover, false) => {
                 Size2D::new(Au::from_f64_px(bounds.size.height.to_f64_px() * image_aspect_ratio),
                             bounds.size.height)
             }
 
-            (background_size::single_value::T::Explicit(background_size::single_value
-                                                                       ::ExplicitSize {
-                width,
-                height: LengthOrPercentageOrAuto::Auto,
-            }), _) => {
+            (BackgroundSize::Explicit { width, height: LengthOrPercentageOrAuto::Auto }, _) => {
                 let width = MaybeAuto::from_style(width, bounds.size.width)
                                       .specified_or_default(intrinsic_size.width);
                 Size2D::new(width, Au::from_f64_px(width.to_f64_px() / image_aspect_ratio))
             }
 
-            (background_size::single_value::T::Explicit(background_size::single_value
-                                                                       ::ExplicitSize {
-                width: LengthOrPercentageOrAuto::Auto,
-                height
-            }), _) => {
+            (BackgroundSize::Explicit { width: LengthOrPercentageOrAuto::Auto, height }, _) => {
                 let height = MaybeAuto::from_style(height, bounds.size.height)
                                        .specified_or_default(intrinsic_size.height);
                 Size2D::new(Au::from_f64_px(height.to_f64_px() * image_aspect_ratio), height)
             }
 
-            (background_size::single_value::T::Explicit(background_size::single_value
-                                                                       ::ExplicitSize {
-                width,
-                height
-            }), _) => {
+            (BackgroundSize::Explicit { width, height }, _) => {
                 Size2D::new(MaybeAuto::from_style(width, bounds.size.width)
                                  .specified_or_default(intrinsic_size.width),
                        MaybeAuto::from_style(height, bounds.size.height)
                                  .specified_or_default(intrinsic_size.height))
             }
         }
     }
 
--- a/servo/components/script/Cargo.toml
+++ b/servo/components/script/Cargo.toml
@@ -43,17 +43,17 @@ domobject_derive = {path = "../domobject
 encoding = "0.2"
 euclid = "0.11"
 fnv = "1.0"
 gleam = "0.4"
 gfx_traits = {path = "../gfx_traits"}
 half = "1.0"
 heapsize = "0.3.6"
 heapsize_derive = "0.1"
-html5ever = {version = "0.16", features = ["heap_size", "unstable"]}
+html5ever = {version = "0.17", features = ["heap_size", "unstable"]}
 hyper = "0.10"
 hyper_serde = "0.6"
 image = "0.12"
 ipc-channel = "0.7"
 js = {git = "https://github.com/servo/rust-mozjs", features = ["promises"]}
 jstraceable_derive = {path = "../jstraceable_derive"}
 lazy_static = "0.2"
 libc = "0.2"
@@ -85,12 +85,12 @@ servo_url = {path = "../url"}
 smallvec = "0.3"
 style = {path = "../style"}
 style_traits = {path = "../style_traits"}
 swapper = "0.0.4"
 time = "0.1.12"
 unicode-segmentation = "1.1.0"
 url = {version = "1.2", features = ["heap_size", "query_encoding"]}
 uuid = {version = "0.4", features = ["v4"]}
-xml5ever = {version = "0.6", features = ["unstable"]}
+xml5ever = {version = "0.7", features = ["unstable"]}
 webrender_traits = {git = "https://github.com/servo/webrender", features = ["ipc"]}
 webvr = {path = "../webvr"}
 webvr_traits = {path = "../webvr_traits"}
--- a/servo/components/script/dom/bindings/trace.rs
+++ b/servo/components/script/dom/bindings/trace.rs
@@ -44,16 +44,17 @@ use dom::bindings::utils::WindowProxyHan
 use dom::document::PendingRestyle;
 use encoding::types::EncodingRef;
 use euclid::{Matrix2D, Matrix4D, Point2D};
 use euclid::length::Length as EuclidLength;
 use euclid::rect::Rect;
 use euclid::size::Size2D;
 use html5ever::{Prefix, LocalName, Namespace, QualName};
 use html5ever::buffer_queue::BufferQueue;
+use html5ever::tendril::IncompleteUtf8;
 use hyper::header::Headers;
 use hyper::method::Method;
 use hyper::mime::Mime;
 use hyper::status::StatusCode;
 use ipc_channel::ipc::{IpcReceiver, IpcSender};
 use js::glue::{CallObjectTracer, CallValueTracer};
 use js::jsapi::{GCTraceKindToAscii, Heap, JSObject, JSTracer, TraceKind};
 use js::jsval::JSVal;
@@ -336,17 +337,17 @@ unsafe_no_jsmanaged_fields!(TrustedPromi
 unsafe_no_jsmanaged_fields!(PropertyDeclarationBlock);
 // These three are interdependent, if you plan to put jsmanaged data
 // in one of these make sure it is propagated properly to containing structs
 unsafe_no_jsmanaged_fields!(DocumentActivity, WindowSizeData, WindowSizeType);
 unsafe_no_jsmanaged_fields!(BrowsingContextId, FrameType, PipelineId, TopLevelBrowsingContextId);
 unsafe_no_jsmanaged_fields!(TimerEventId, TimerSource);
 unsafe_no_jsmanaged_fields!(TimelineMarkerType);
 unsafe_no_jsmanaged_fields!(WorkerId);
-unsafe_no_jsmanaged_fields!(BufferQueue, QuirksMode);
+unsafe_no_jsmanaged_fields!(BufferQueue, QuirksMode, IncompleteUtf8);
 unsafe_no_jsmanaged_fields!(Runtime);
 unsafe_no_jsmanaged_fields!(Headers, Method);
 unsafe_no_jsmanaged_fields!(WindowProxyHandler);
 unsafe_no_jsmanaged_fields!(UntrustedNodeAddress);
 unsafe_no_jsmanaged_fields!(LengthOrPercentageOrAuto);
 unsafe_no_jsmanaged_fields!(RGBA);
 unsafe_no_jsmanaged_fields!(StorageType);
 unsafe_no_jsmanaged_fields!(CanvasGradientStop, LinearGradientStyle, RadialGradientStyle);
--- a/servo/components/script/dom/servoparser/html.rs
+++ b/servo/components/script/dom/servoparser/html.rs
@@ -82,17 +82,17 @@ impl Tokenizer {
         }
     }
 
     pub fn end(&mut self) {
         self.inner.end();
     }
 
     pub fn url(&self) -> &ServoUrl {
-        &self.inner.sink().sink().base_url
+        &self.inner.sink.sink.base_url
     }
 
     pub fn set_plaintext_state(&mut self) {
         self.inner.set_plaintext_state();
     }
 }
 
 #[allow(unsafe_code)]
@@ -104,19 +104,19 @@ unsafe impl JSTraceable for HtmlTokenize
         impl HtmlTracer for Tracer {
             type Handle = JS<Node>;
             #[allow(unrooted_must_root)]
             fn trace_handle(&self, node: &JS<Node>) {
                 unsafe { node.trace(self.0); }
             }
         }
 
-        let tree_builder = self.sink();
+        let tree_builder = &self.sink;
         tree_builder.trace_handles(&tracer);
-        tree_builder.sink().trace(trc);
+        tree_builder.sink.trace(trc);
     }
 }
 
 impl<'a> Serialize for &'a Node {
     fn serialize<S: Serializer>(&self, serializer: &mut S,
                                 traversal_scope: TraversalScope) -> io::Result<()> {
         let node = *self;
         match (traversal_scope, node.type_id()) {
--- a/servo/components/script/dom/servoparser/mod.rs
+++ b/servo/components/script/dom/servoparser/mod.rs
@@ -24,21 +24,19 @@ use dom::htmlformelement::{FormControlEl
 use dom::htmlimageelement::HTMLImageElement;
 use dom::htmlscriptelement::{HTMLScriptElement, ScriptResult};
 use dom::htmltemplateelement::HTMLTemplateElement;
 use dom::node::{Node, NodeSiblingIterator};
 use dom::processinginstruction::ProcessingInstruction;
 use dom::text::Text;
 use dom::virtualmethods::vtable_for;
 use dom_struct::dom_struct;
-use encoding::all::UTF_8;
-use encoding::types::{DecoderTrap, Encoding};
 use html5ever::{Attribute, QualName, ExpandedName};
 use html5ever::buffer_queue::BufferQueue;
-use html5ever::tendril::StrTendril;
+use html5ever::tendril::{StrTendril, ByteTendril, IncompleteUtf8};
 use html5ever::tree_builder::{NodeOrText, TreeSink, NextParserState, QuirksMode, ElementFlags};
 use hyper::header::ContentType;
 use hyper::mime::{Mime, SubLevel, TopLevel};
 use hyper_serde::Serde;
 use msg::constellation_msg::PipelineId;
 use net_traits::{FetchMetadata, FetchResponseListener, Metadata, NetworkError};
 use network_listener::PreInvoke;
 use profile_traits::time::{TimerMetadata, TimerMetadataFrameType};
@@ -71,16 +69,19 @@ mod xml;
 /// ```
 pub struct ServoParser {
     reflector: Reflector,
     /// The document associated with this parser.
     document: JS<Document>,
     /// Input received from network.
     #[ignore_heap_size_of = "Defined in html5ever"]
     network_input: DOMRefCell<BufferQueue>,
+    /// Part of an UTF-8 code point spanning input chunks
+    #[ignore_heap_size_of = "Defined in html5ever"]
+    incomplete_utf8: DOMRefCell<Option<IncompleteUtf8>>,
     /// Input received from script. Used only to support document.write().
     #[ignore_heap_size_of = "Defined in html5ever"]
     script_input: DOMRefCell<BufferQueue>,
     /// The tokenizer of this parser.
     tokenizer: DOMRefCell<Tokenizer>,
     /// Whether to expect any further input from the associated network request.
     last_chunk_received: Cell<bool>,
     /// Whether this parser should avoid passing any further data to the tokenizer.
@@ -100,17 +101,17 @@ enum LastChunkState {
 }
 
 impl ServoParser {
     pub fn parse_html_document(document: &Document, input: DOMString, url: ServoUrl) {
         let parser = ServoParser::new(document,
                                       Tokenizer::Html(self::html::Tokenizer::new(document, url, None)),
                                       LastChunkState::NotReceived,
                                       ParserKind::Normal);
-        parser.parse_chunk(String::from(input));
+        parser.parse_string_chunk(String::from(input));
     }
 
     // https://html.spec.whatwg.org/multipage/#parsing-html-fragments
     pub fn parse_html_fragment(context: &Element, input: DOMString) -> FragmentParsingResult {
         let context_node = context.upcast::<Node>();
         let context_document = context_node.owner_doc();
         let window = context_document.window();
         let url = context_document.url();
@@ -143,43 +144,43 @@ impl ServoParser {
         };
 
         let parser = ServoParser::new(&document,
                                       Tokenizer::Html(self::html::Tokenizer::new(&document,
                                                                                  url.clone(),
                                                                                  Some(fragment_context))),
                                       LastChunkState::Received,
                                       ParserKind::Normal);
-        parser.parse_chunk(String::from(input));
+        parser.parse_string_chunk(String::from(input));
 
         // Step 14.
         let root_element = document.GetDocumentElement().expect("no document element");
         FragmentParsingResult {
             inner: root_element.upcast::<Node>().children(),
         }
     }
 
     pub fn parse_html_script_input(document: &Document, url: ServoUrl, type_: &str) {
         let parser = ServoParser::new(document,
                                       Tokenizer::Html(self::html::Tokenizer::new(document, url, None)),
                                       LastChunkState::NotReceived,
                                       ParserKind::ScriptCreated);
         document.set_current_parser(Some(&parser));
         if !type_.eq_ignore_ascii_case("text/html") {
-            parser.parse_chunk("<pre>\n".to_owned());
+            parser.parse_string_chunk("<pre>\n".to_owned());
             parser.tokenizer.borrow_mut().set_plaintext_state();
         }
     }
 
     pub fn parse_xml_document(document: &Document, input: DOMString, url: ServoUrl) {
         let parser = ServoParser::new(document,
                                       Tokenizer::Xml(self::xml::Tokenizer::new(document, url)),
                                       LastChunkState::NotReceived,
                                       ParserKind::Normal);
-        parser.parse_chunk(String::from(input));
+        parser.parse_string_chunk(String::from(input));
     }
 
     pub fn script_nesting_level(&self) -> usize {
         self.script_nesting_level.get()
     }
 
     pub fn is_script_created(&self) -> bool {
         self.script_created_parser
@@ -304,16 +305,17 @@ impl ServoParser {
     fn new_inherited(document: &Document,
                      tokenizer: Tokenizer,
                      last_chunk_state: LastChunkState,
                      kind: ParserKind)
                      -> Self {
         ServoParser {
             reflector: Reflector::new(),
             document: JS::from_ref(document),
+            incomplete_utf8: DOMRefCell::new(None),
             network_input: DOMRefCell::new(BufferQueue::new()),
             script_input: DOMRefCell::new(BufferQueue::new()),
             tokenizer: DOMRefCell::new(tokenizer),
             last_chunk_received: Cell::new(last_chunk_state == LastChunkState::Received),
             suspended: Default::default(),
             script_nesting_level: Default::default(),
             aborted: Default::default(),
             script_created_parser: kind == ParserKind::ScriptCreated,
@@ -326,17 +328,38 @@ impl ServoParser {
            last_chunk_state: LastChunkState,
            kind: ParserKind)
            -> Root<Self> {
         reflect_dom_object(box ServoParser::new_inherited(document, tokenizer, last_chunk_state, kind),
                            document.window(),
                            ServoParserBinding::Wrap)
     }
 
-    fn push_input_chunk(&self, chunk: String) {
+    fn push_bytes_input_chunk(&self, chunk: Vec<u8>) {
+        let mut chunk = ByteTendril::from(&*chunk);
+        let mut network_input = self.network_input.borrow_mut();
+        let mut incomplete_utf8 = self.incomplete_utf8.borrow_mut();
+
+        if let Some(mut incomplete) = incomplete_utf8.take() {
+            let result = incomplete.try_complete(chunk, |s| network_input.push_back(s));
+            match result {
+                Err(()) => {
+                    *incomplete_utf8 = Some(incomplete);
+                    return
+                }
+                Ok(remaining) => {
+                    chunk = remaining
+                }
+            }
+        }
+
+        *incomplete_utf8 = chunk.decode_utf8_lossy(|s| network_input.push_back(s));
+    }
+
+    fn push_string_input_chunk(&self, chunk: String) {
         self.network_input.borrow_mut().push_back(chunk.into());
     }
 
     fn parse_sync(&self) {
         let metadata = TimerMetadata {
             url: self.document.url().as_str().into(),
             iframe: TimerMetadataFrameType::RootWindow,
             incremental: TimerMetadataReflowType::FirstReflow,
@@ -349,32 +372,45 @@ impl ServoParser {
     }
 
     fn do_parse_sync(&self) {
         assert!(self.script_input.borrow().is_empty());
 
         // This parser will continue to parse while there is either pending input or
         // the parser remains unsuspended.
 
+        if self.last_chunk_received.get() {
+            if let Some(_) = self.incomplete_utf8.borrow_mut().take() {
+                self.network_input.borrow_mut().push_back(StrTendril::from("\u{FFFD}"))
+            }
+        }
         self.tokenize(|tokenizer| tokenizer.feed(&mut *self.network_input.borrow_mut()));
 
         if self.suspended.get() {
             return;
         }
 
         assert!(self.network_input.borrow().is_empty());
 
         if self.last_chunk_received.get() {
             self.finish();
         }
     }
 
-    fn parse_chunk(&self, input: String) {
+    fn parse_string_chunk(&self, input: String) {
         self.document.set_current_parser(Some(self));
-        self.push_input_chunk(input);
+        self.push_string_input_chunk(input);
+        if !self.suspended.get() {
+            self.parse_sync();
+        }
+    }
+
+    fn parse_bytes_chunk(&self, input: Vec<u8>) {
+        self.document.set_current_parser(Some(self));
+        self.push_bytes_input_chunk(input);
         if !self.suspended.get() {
             self.parse_sync();
         }
     }
 
     fn tokenize<F>(&self, mut feed: F)
         where F: FnMut(&mut Tokenizer) -> Result<(), Root<HTMLScriptElement>>,
     {
@@ -402,16 +438,17 @@ impl ServoParser {
     }
 
     // https://html.spec.whatwg.org/multipage/#the-end
     fn finish(&self) {
         assert!(!self.suspended.get());
         assert!(self.last_chunk_received.get());
         assert!(self.script_input.borrow().is_empty());
         assert!(self.network_input.borrow().is_empty());
+        assert!(self.incomplete_utf8.borrow().is_none());
 
         // Step 1.
         self.document.set_ready_state(DocumentReadyState::Interactive);
 
         // Step 2.
         self.tokenizer.borrow_mut().end();
         self.document.set_current_parser(None);
 
@@ -553,88 +590,86 @@ impl FetchResponseListener for ParserCon
         }
 
         self.parser = Some(Trusted::new(&*parser));
 
         match content_type {
             Some(ContentType(Mime(TopLevel::Image, _, _))) => {
                 self.is_synthesized_document = true;
                 let page = "<html><body></body></html>".into();
-                parser.push_input_chunk(page);
+                parser.push_string_input_chunk(page);
                 parser.parse_sync();
 
                 let doc = &parser.document;
                 let doc_body = Root::upcast::<Node>(doc.GetBody().unwrap());
                 let img = HTMLImageElement::new(local_name!("img"), None, doc);
                 img.SetSrc(DOMString::from(self.url.to_string()));
                 doc_body.AppendChild(&Root::upcast::<Node>(img)).expect("Appending failed");
 
             },
             Some(ContentType(Mime(TopLevel::Text, SubLevel::Plain, _))) => {
                 // https://html.spec.whatwg.org/multipage/#read-text
                 let page = "<pre>\n".into();
-                parser.push_input_chunk(page);
+                parser.push_string_input_chunk(page);
                 parser.parse_sync();
                 parser.tokenizer.borrow_mut().set_plaintext_state();
             },
             Some(ContentType(Mime(TopLevel::Text, SubLevel::Html, _))) => {
                 // Handle text/html
                 if let Some(reason) = ssl_error {
                     self.is_synthesized_document = true;
                     let page_bytes = read_resource_file("badcert.html").unwrap();
                     let page = String::from_utf8(page_bytes).unwrap();
                     let page = page.replace("${reason}", &reason);
-                    parser.push_input_chunk(page);
+                    parser.push_string_input_chunk(page);
                     parser.parse_sync();
                 }
                 if let Some(reason) = network_error {
                     self.is_synthesized_document = true;
                     let page_bytes = read_resource_file("neterror.html").unwrap();
                     let page = String::from_utf8(page_bytes).unwrap();
                     let page = page.replace("${reason}", &reason);
-                    parser.push_input_chunk(page);
+                    parser.push_string_input_chunk(page);
                     parser.parse_sync();
                 }
             },
             Some(ContentType(Mime(TopLevel::Text, SubLevel::Xml, _))) => {}, // Handle text/xml
             Some(ContentType(Mime(toplevel, sublevel, _))) => {
                 if toplevel.as_str() == "application" && sublevel.as_str() == "xhtml+xml" {
                     // Handle xhtml (application/xhtml+xml).
                     return;
                 }
 
                 // Show warning page for unknown mime types.
                 let page = format!("<html><body><p>Unknown content type ({}/{}).</p></body></html>",
                                    toplevel.as_str(),
                                    sublevel.as_str());
                 self.is_synthesized_document = true;
-                parser.push_input_chunk(page);
+                parser.push_string_input_chunk(page);
                 parser.parse_sync();
             },
             None => {
                 // No content-type header.
                 // Merge with #4212 when fixed.
             },
         }
     }
 
     fn process_response_chunk(&mut self, payload: Vec<u8>) {
         if self.is_synthesized_document {
             return;
         }
-        // FIXME: use Vec<u8> (html5ever #34)
-        let data = UTF_8.decode(&payload, DecoderTrap::Replace).unwrap();
         let parser = match self.parser.as_ref() {
             Some(parser) => parser.root(),
             None => return,
         };
         if parser.aborted.get() {
             return;
         }
-        parser.parse_chunk(data);
+        parser.parse_bytes_chunk(payload);
     }
 
     fn process_response_eof(&mut self, status: Result<(), NetworkError>) {
         let parser = match self.parser.as_ref() {
             Some(parser) => parser.root(),
             None => return,
         };
         if parser.aborted.get() {
--- a/servo/components/script/dom/servoparser/xml.rs
+++ b/servo/components/script/dom/servoparser/xml.rs
@@ -39,35 +39,35 @@ impl Tokenizer {
             inner: tok,
         }
     }
 
     pub fn feed(&mut self, input: &mut BufferQueue) -> Result<(), Root<HTMLScriptElement>> {
         if !input.is_empty() {
             while let Some(chunk) = input.pop_front() {
                 self.inner.feed(chunk);
-                if let Some(script) = self.inner.sink().sink().script.take() {
+                if let Some(script) = self.inner.sink.sink.script.take() {
                     return Err(script);
                 }
             }
         } else {
             self.inner.run();
-            if let Some(script) = self.inner.sink().sink().script.take() {
+            if let Some(script) = self.inner.sink.sink.script.take() {
                 return Err(script);
             }
         }
         Ok(())
     }
 
     pub fn end(&mut self) {
         self.inner.end()
     }
 
     pub fn url(&self) -> &ServoUrl {
-        &self.inner.sink().sink().base_url
+        &self.inner.sink.sink.base_url
     }
 }
 
 #[allow(unsafe_code)]
 unsafe impl JSTraceable for XmlTokenizer<XmlTreeBuilder<JS<Node>, Sink>> {
     unsafe fn trace(&self, trc: *mut JSTracer) {
         struct Tracer(*mut JSTracer);
         let tracer = Tracer(trc);
@@ -75,13 +75,13 @@ unsafe impl JSTraceable for XmlTokenizer
         impl XmlTracer for Tracer {
             type Handle = JS<Node>;
             #[allow(unrooted_must_root)]
             fn trace_handle(&self, node: &JS<Node>) {
                 unsafe { node.trace(self.0); }
             }
         }
 
-        let tree_builder = self.sink();
+        let tree_builder = &self.sink;
         tree_builder.trace_handles(&tracer);
-        tree_builder.sink().trace(trc);
+        tree_builder.sink.trace(trc);
     }
 }
--- a/servo/components/script_layout_interface/Cargo.toml
+++ b/servo/components/script_layout_interface/Cargo.toml
@@ -13,17 +13,17 @@ path = "lib.rs"
 app_units = "0.4.1"
 atomic_refcell = "0.1"
 canvas_traits = {path = "../canvas_traits"}
 cssparser = "0.13.3"
 euclid = "0.11"
 gfx_traits = {path = "../gfx_traits"}
 heapsize = "0.3.0"
 heapsize_derive = "0.1"
-html5ever = "0.16"
+html5ever = "0.17"
 ipc-channel = "0.7"
 libc = "0.2"
 log = "0.3.5"
 msg = {path = "../msg"}
 net_traits = {path = "../net_traits"}
 profile_traits = {path = "../profile_traits"}
 range = {path = "../range"}
 script_traits = {path = "../script_traits"}
--- a/servo/components/style/Cargo.toml
+++ b/servo/components/style/Cargo.toml
@@ -39,17 +39,17 @@ byteorder = "1.0"
 cfg-if = "0.1.0"
 cssparser = "0.13.5"
 encoding = {version = "0.2", optional = true}
 euclid = "0.11"
 fnv = "1.0"
 heapsize = {version = "0.3.0", optional = true}
 heapsize_derive = {version = "0.1", optional = true}
 itoa = "0.3"
-html5ever = {version = "0.16", optional = true}
+html5ever = {version = "0.17", optional = true}
 lazy_static = "0.2"
 log = "0.3"
 matches = "0.1"
 nsstring_vendor = {path = "gecko_bindings/nsstring_vendor", optional = true}
 num_cpus = {version = "1.1.0", optional = true}
 num-integer = "0.1.32"
 num-traits = "0.1.32"
 ordered-float = "0.4"
--- a/servo/components/style/counter_style/mod.rs
+++ b/servo/components/style/counter_style/mod.rs
@@ -332,17 +332,17 @@ impl ToCss for System {
                 dest.write_str("extends ")?;
                 other.to_css(dest)
             }
         }
     }
 }
 
 /// https://drafts.csswg.org/css-counter-styles/#typedef-symbol
-#[derive(Debug, Clone)]
+#[derive(Debug, Clone, PartialEq, Eq)]
 pub enum Symbol {
     /// <string>
     String(String),
     /// <ident>
     Ident(String),
     // Not implemented:
     // /// <image>
     // Image(Image),
@@ -362,16 +362,27 @@ impl ToCss for Symbol {
     fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
         match *self {
             Symbol::String(ref s) => serialize_string(s, dest),
             Symbol::Ident(ref s) => serialize_identifier(s, dest),
         }
     }
 }
 
+impl Symbol {
+    /// Returns whether this symbol is allowed in symbols() function.
+    pub fn is_allowed_in_symbols(&self) -> bool {
+        match self {
+            // Identifier is not allowed.
+            &Symbol::Ident(_) => false,
+            _ => true,
+        }
+    }
+}
+
 /// https://drafts.csswg.org/css-counter-styles/#counter-style-negative
 #[derive(Debug, Clone)]
 pub struct Negative(pub Symbol, pub Option<Symbol>);
 
 impl Parse for Negative {
     fn parse(context: &ParserContext, input: &mut Parser) -> Result<Self, ()> {
         Ok(Negative(
             Symbol::parse(context, input)?,
@@ -490,17 +501,17 @@ impl Parse for Fallback {
 
 impl ToCss for Fallback {
     fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
         self.0.to_css(dest)
     }
 }
 
 /// https://drafts.csswg.org/css-counter-styles/#descdef-counter-style-symbols
-#[derive(Debug, Clone)]
+#[derive(Debug, Clone, PartialEq, Eq)]
 pub struct Symbols(pub Vec<Symbol>);
 
 impl Parse for Symbols {
     fn parse(context: &ParserContext, input: &mut Parser) -> Result<Self, ()> {
         let mut symbols = Vec::new();
         loop {
             if let Ok(s) = input.try(|input| Symbol::parse(context, input)) {
                 symbols.push(s)
--- a/servo/components/style/gecko/conversions.rs
+++ b/servo/components/style/gecko/conversions.rs
@@ -364,33 +364,37 @@ pub mod basic_shape {
     use std::borrow::Borrow;
     use values::computed::{BorderRadiusSize, LengthOrPercentage};
     use values::computed::basic_shape::{BasicShape, BorderRadius, ShapeRadius};
     use values::computed::position;
     use values::generics::BorderRadiusSize as GenericBorderRadiusSize;
     use values::generics::basic_shape::{BasicShape as GenericBasicShape, InsetRect, Polygon};
     use values::generics::basic_shape::{Circle, Ellipse, FillRule};
     use values::generics::basic_shape::{GeometryBox, ShapeBox};
+    use values::generics::rect::Rect;
 
     // using Borrow so that we can have a non-moving .into()
     impl<T: Borrow<StyleBasicShape>> From<T> for BasicShape {
         fn from(other: T) -> Self {
             let other = other.borrow();
             match other.mType {
                 StyleBasicShapeType::Inset => {
                     let t = LengthOrPercentage::from_gecko_style_coord(&other.mCoordinates[0]);
                     let r = LengthOrPercentage::from_gecko_style_coord(&other.mCoordinates[1]);
                     let b = LengthOrPercentage::from_gecko_style_coord(&other.mCoordinates[2]);
                     let l = LengthOrPercentage::from_gecko_style_coord(&other.mCoordinates[3]);
                     let round = (&other.mRadius).into();
+                    let rect = Rect::new(
+                        t.expect("inset() offset should be a length, percentage, or calc value"),
+                        r.expect("inset() offset should be a length, percentage, or calc value"),
+                        b.expect("inset() offset should be a length, percentage, or calc value"),
+                        l.expect("inset() offset should be a length, percentage, or calc value"),
+                    );
                     GenericBasicShape::Inset(InsetRect {
-                        top: t.expect("inset() offset should be a length, percentage, or calc value"),
-                        right: r.expect("inset() offset should be a length, percentage, or calc value"),
-                        bottom: b.expect("inset() offset should be a length, percentage, or calc value"),
-                        left: l.expect("inset() offset should be a length, percentage, or calc value"),
+                        rect: rect,
                         round: Some(round),
                     })
                 }
                 StyleBasicShapeType::Circle => {
                     GenericBasicShape::Circle(Circle {
                         radius: (&other.mCoordinates[0]).into(),
                         position: (&other.mPosition).into()
                     })
--- a/servo/components/style/gecko/generated/atom_macro.rs
+++ b/servo/components/style/gecko/generated/atom_macro.rs
@@ -1869,16 +1869,20 @@ cfg_if! {
             #[link_name = "_ZN9nsGkAtoms13onselectstartE"]
             pub static nsGkAtoms_onselectstart: *mut nsIAtom;
             #[link_name = "_ZN9nsGkAtoms9onsendingE"]
             pub static nsGkAtoms_onsending: *mut nsIAtom;
             #[link_name = "_ZN9nsGkAtoms6onsentE"]
             pub static nsGkAtoms_onsent: *mut nsIAtom;
             #[link_name = "_ZN9nsGkAtoms5onsetE"]
             pub static nsGkAtoms_onset: *mut nsIAtom;
+            #[link_name = "_ZN9nsGkAtoms23onshippingaddresschangeE"]
+            pub static nsGkAtoms_onshippingaddresschange: *mut nsIAtom;
+            #[link_name = "_ZN9nsGkAtoms22onshippingoptionchangeE"]
+            pub static nsGkAtoms_onshippingoptionchange: *mut nsIAtom;
             #[link_name = "_ZN9nsGkAtoms6onshowE"]
             pub static nsGkAtoms_onshow: *mut nsIAtom;
             #[link_name = "_ZN9nsGkAtoms13onstatechangeE"]
             pub static nsGkAtoms_onstatechange: *mut nsIAtom;
             #[link_name = "_ZN9nsGkAtoms15onstatuschangedE"]
             pub static nsGkAtoms_onstatuschanged: *mut nsIAtom;
             #[link_name = "_ZN9nsGkAtoms12onstkcommandE"]
             pub static nsGkAtoms_onstkcommand: *mut nsIAtom;
@@ -6888,16 +6892,20 @@ cfg_if! {
             #[link_name = "?onselectstart@nsGkAtoms@@2PEAVnsIAtom@@EA"]
             pub static nsGkAtoms_onselectstart: *mut nsIAtom;
             #[link_name = "?onsending@nsGkAtoms@@2PEAVnsIAtom@@EA"]
             pub static nsGkAtoms_onsending: *mut nsIAtom;
             #[link_name = "?onsent@nsGkAtoms@@2PEAVnsIAtom@@EA"]
             pub static nsGkAtoms_onsent: *mut nsIAtom;
             #[link_name = "?onset@nsGkAtoms@@2PEAVnsIAtom@@EA"]
             pub static nsGkAtoms_onset: *mut nsIAtom;
+            #[link_name = "?onshippingaddresschange@nsGkAtoms@@2PEAVnsIAtom@@EA"]
+            pub static nsGkAtoms_onshippingaddresschange: *mut nsIAtom;
+            #[link_name = "?onshippingoptionchange@nsGkAtoms@@2PEAVnsIAtom@@EA"]
+            pub static nsGkAtoms_onshippingoptionchange: *mut nsIAtom;
             #[link_name = "?onshow@nsGkAtoms@@2PEAVnsIAtom@@EA"]
             pub static nsGkAtoms_onshow: *mut nsIAtom;
             #[link_name = "?onstatechange@nsGkAtoms@@2PEAVnsIAtom@@EA"]
             pub static nsGkAtoms_onstatechange: *mut nsIAtom;
             #[link_name = "?onstatuschanged@nsGkAtoms@@2PEAVnsIAtom@@EA"]
             pub static nsGkAtoms_onstatuschanged: *mut nsIAtom;
             #[link_name = "?onstkcommand@nsGkAtoms@@2PEAVnsIAtom@@EA"]
             pub static nsGkAtoms_onstkcommand: *mut nsIAtom;
@@ -11907,16 +11915,20 @@ cfg_if! {
             #[link_name = "\x01?onselectstart@nsGkAtoms@@2PAVnsIAtom@@A"]
             pub static nsGkAtoms_onselectstart: *mut nsIAtom;
             #[link_name = "\x01?onsending@nsGkAtoms@@2PAVnsIAtom@@A"]
             pub static nsGkAtoms_onsending: *mut nsIAtom;
             #[link_name = "\x01?onsent@nsGkAtoms@@2PAVnsIAtom@@A"]
             pub static nsGkAtoms_onsent: *mut nsIAtom;
             #[link_name = "\x01?onset@nsGkAtoms@@2PAVnsIAtom@@A"]
             pub static nsGkAtoms_onset: *mut nsIAtom;
+            #[link_name = "\x01?onshippingaddresschange@nsGkAtoms@@2PAVnsIAtom@@A"]
+            pub static nsGkAtoms_onshippingaddresschange: *mut nsIAtom;
+            #[link_name = "\x01?onshippingoptionchange@nsGkAtoms@@2PAVnsIAtom@@A"]
+            pub static nsGkAtoms_onshippingoptionchange: *mut nsIAtom;
             #[link_name = "\x01?onshow@nsGkAtoms@@2PAVnsIAtom@@A"]
             pub static nsGkAtoms_onshow: *mut nsIAtom;
             #[link_name = "\x01?onstatechange@nsGkAtoms@@2PAVnsIAtom@@A"]
             pub static nsGkAtoms_onstatechange: *mut nsIAtom;
             #[link_name = "\x01?onstatuschanged@nsGkAtoms@@2PAVnsIAtom@@A"]
             pub static nsGkAtoms_onstatuschanged: *mut nsIAtom;
             #[link_name = "\x01?onstkcommand@nsGkAtoms@@2PAVnsIAtom@@A"]
             pub static nsGkAtoms_onstkcommand: *mut nsIAtom;
@@ -16929,16 +16941,20 @@ macro_rules! atom {
 ("onselectstart") =>
   { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onselectstart as *mut _) } };
 ("onsending") =>
   { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onsending as *mut _) } };
 ("onsent") =>
   { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onsent as *mut _) } };
 ("onset") =>
   { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onset as *mut _) } };
+("onshippingaddresschange") =>
+  { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onshippingaddresschange as *mut _) } };
+("onshippingoptionchange") =>
+  { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onshippingoptionchange as *mut _) } };
 ("onshow") =>
   { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onshow as *mut _) } };
 ("onstatechange") =>
   { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onstatechange as *mut _) } };
 ("onstatuschanged") =>
   { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onstatuschanged as *mut _) } };
 ("onstkcommand") =>
   { unsafe { $crate::string_cache::atom_macro::atom_from_static($crate::string_cache::atom_macro::nsGkAtoms_onstkcommand as *mut _) } };
--- a/servo/components/style/gecko/generated/bindings.rs
+++ b/servo/components/style/gecko/generated/bindings.rs
@@ -27,16 +27,17 @@ use gecko_bindings::structs::RawGeckoSty
 use gecko_bindings::structs::RawGeckoServoStyleRuleList;
 use gecko_bindings::structs::RawGeckoURLExtraData;
 use gecko_bindings::structs::RefPtr;
 use gecko_bindings::structs::CSSPseudoClassType;
 use gecko_bindings::structs::CSSPseudoElementType;
 use gecko_bindings::structs::TraversalRestyleBehavior;
 use gecko_bindings::structs::TraversalRootBehavior;
 use gecko_bindings::structs::ComputedTimingFunction_BeforeFlag;
+use gecko_bindings::structs::CounterStylePtr;
 use gecko_bindings::structs::FontFamilyList;
 use gecko_bindings::structs::FontFamilyType;
 use gecko_bindings::structs::FontSizePrefs;
 use gecko_bindings::structs::GeckoFontMetrics;
 use gecko_bindings::structs::IterationCompositeOperation;
 use gecko_bindings::structs::Keyframe;
 use gecko_bindings::structs::ServoBundledURI;
 use gecko_bindings::structs::ServoElementSnapshot;
@@ -847,22 +848,32 @@ extern "C" {
     pub fn Gecko_SetImageOrientationAsFromImage(aVisibility:
                                                     *mut nsStyleVisibility);
 }
 extern "C" {
     pub fn Gecko_CopyImageOrientationFrom(aDst: *mut nsStyleVisibility,
                                           aSrc: *const nsStyleVisibility);
 }
 extern "C" {
-    pub fn Gecko_SetListStyleType(style_struct: *mut nsStyleList,
-                                  name: *mut nsIAtom);
-}
-extern "C" {
-    pub fn Gecko_CopyListStyleTypeFrom(dst: *mut nsStyleList,
-                                       src: *const nsStyleList);
+    pub fn Gecko_SetCounterStyleToName(ptr: *mut CounterStylePtr,
+                                       name: *mut nsIAtom);
+}
+extern "C" {
+    pub fn Gecko_SetCounterStyleToSymbols(ptr: *mut CounterStylePtr,
+                                          symbols_type: u8,
+                                          symbols: *const *const nsACString,
+                                          symbols_count: u32);
+}
+extern "C" {
+    pub fn Gecko_SetCounterStyleToString(ptr: *mut CounterStylePtr,
+                                         symbol: *const nsACString);
+}
+extern "C" {
+    pub fn Gecko_CopyCounterStyle(dst: *mut CounterStylePtr,
+                                  src: *const CounterStylePtr);
 }
 extern "C" {
     pub fn Gecko_SetNullImageValue(image: *mut nsStyleImage);
 }
 extern "C" {
     pub fn Gecko_SetGradientImageValue(image: *mut nsStyleImage,
                                        gradient: *mut nsStyleGradient);
 }
@@ -1118,16 +1129,24 @@ extern "C" {
     pub fn Gecko_nsStyleSVG_SetDashArrayLength(svg: *mut nsStyleSVG,
                                                len: u32);
 }
 extern "C" {
     pub fn Gecko_nsStyleSVG_CopyDashArray(dst: *mut nsStyleSVG,
                                           src: *const nsStyleSVG);
 }
 extern "C" {
+    pub fn Gecko_nsStyleSVG_SetContextPropertiesLength(svg: *mut nsStyleSVG,
+                                                       len: u32);
+}
+extern "C" {
+    pub fn Gecko_nsStyleSVG_CopyContextProperties(dst: *mut nsStyleSVG,
+                                                  src: *const nsStyleSVG);
+}
+extern "C" {
     pub fn Gecko_NewURLValue(uri: ServoBundledURI) -> *mut URLValue;
 }
 extern "C" {
     pub fn Gecko_AddRefCSSURLValueArbitraryThread(aPtr: *mut URLValue);
 }
 extern "C" {
     pub fn Gecko_ReleaseCSSURLValueArbitraryThread(aPtr: *mut URLValue);
 }
@@ -1292,16 +1311,21 @@ extern "C" {
                                           aSource: *const nsStyleFont);
 }
 extern "C" {
     pub fn Gecko_nsStyleFont_FixupNoneGeneric(font: *mut nsStyleFont,
                                               pres_context:
                                                   RawGeckoPresContextBorrowed);
 }
 extern "C" {
+    pub fn Gecko_nsStyleFont_FixupMinFontSize(font: *mut nsStyleFont,
+                                              pres_context:
+                                                  RawGeckoPresContextBorrowed);
+}
+extern "C" {
     pub fn Gecko_GetBaseSize(lang: *mut nsIAtom) -> FontSizePrefs;
 }
 extern "C" {
     pub fn Gecko_GetFontMetrics(pres_context: RawGeckoPresContextBorrowed,
                                 is_vertical: bool, font: *const nsStyleFont,
                                 font_size: nscoord, use_user_font_set: bool)
      -> GeckoFontMetrics;
 }
--- a/servo/components/style/gecko/generated/structs_debug.rs
+++ b/servo/components/style/gecko/generated/structs_debug.rs
@@ -801,16 +801,21 @@ pub mod root {
     pub const NS_STYLE_GRADIENT_SIZE_FARTHEST_SIDE: ::std::os::raw::c_uint =
         2;
     pub const NS_STYLE_GRADIENT_SIZE_FARTHEST_CORNER: ::std::os::raw::c_uint =
         3;
     pub const NS_STYLE_GRADIENT_SIZE_EXPLICIT_SIZE: ::std::os::raw::c_uint =
         4;
     pub const NS_STYLE_CONTEXT_PROPERTY_FILL: ::std::os::raw::c_uint = 1;
     pub const NS_STYLE_CONTEXT_PROPERTY_STROKE: ::std::os::raw::c_uint = 2;
+    pub const NS_STYLE_WINDOW_SHADOW_NONE: ::std::os::raw::c_uint = 0;
+    pub const NS_STYLE_WINDOW_SHADOW_DEFAULT: ::std::os::raw::c_uint = 1;
+    pub const NS_STYLE_WINDOW_SHADOW_MENU: ::std::os::raw::c_uint = 2;
+    pub const NS_STYLE_WINDOW_SHADOW_TOOLTIP: ::std::os::raw::c_uint = 3;
+    pub const NS_STYLE_WINDOW_SHADOW_SHEET: ::std::os::raw::c_uint = 4;
     pub const NS_STYLE_DOMINANT_BASELINE_AUTO: ::std::os::raw::c_uint = 0;
     pub const NS_STYLE_DOMINANT_BASELINE_USE_SCRIPT: ::std::os::raw::c_uint =
         1;
     pub const NS_STYLE_DOMINANT_BASELINE_NO_CHANGE: ::std::os::raw::c_uint =
         2;
     pub const NS_STYLE_DOMINANT_BASELINE_RESET_SIZE: ::std::os::raw::c_uint =
         3;
     pub const NS_STYLE_DOMINANT_BASELINE_IDEOGRAPHIC: ::std::os::raw::c_uint =
@@ -1410,57 +1415,57 @@ pub mod root {
                             as * const _ as usize } , 0usize , concat ! (
                             "Alignment of field: " , stringify ! ( MutexImpl )
                             , "::" , stringify ! ( platformData_ ) ));
             }
         }
         #[repr(u32)]
         #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
         pub enum ArenaObjectID {
-            eArenaObjectID_DummyBeforeFirstObjectID = 175,
-            eArenaObjectID_nsLineBox = 176,
-            eArenaObjectID_nsRuleNode = 177,
-            eArenaObjectID_nsStyleContext = 178,
-            eArenaObjectID_DisplayItemData = 179,
-            eArenaObjectID_nsInheritedStyleData = 180,
-            eArenaObjectID_nsResetStyleData = 181,
-            eArenaObjectID_nsConditionalResetStyleData = 182,
-            eArenaObjectID_nsConditionalResetStyleDataEntry = 183,
-            eArenaObjectID_nsFrameList = 184,
-            eArenaObjectID_CustomCounterStyle = 185,
-            eArenaObjectID_DependentBuiltinCounterStyle = 186,
-            eArenaObjectID_nsCallbackEventRequest = 187,
-            eArenaObjectID_nsIntervalSet_Interval = 188,
-            eArenaObjectID_CellData = 189,
-            eArenaObjectID_BCCellData = 190,
-            eArenaObjectID_nsStyleFont = 191,
-            eArenaObjectID_nsStyleColor = 192,
-            eArenaObjectID_nsStyleList = 193,
-            eArenaObjectID_nsStyleText = 194,
-            eArenaObjectID_nsStyleVisibility = 195,
-            eArenaObjectID_nsStyleUserInterface = 196,
-            eArenaObjectID_nsStyleTableBorder = 197,
-            eArenaObjectID_nsStyleSVG = 198,
-            eArenaObjectID_nsStyleVariables = 199,
-            eArenaObjectID_nsStyleBackground = 200,
-            eArenaObjectID_nsStylePosition = 201,
-            eArenaObjectID_nsStyleTextReset = 202,
-            eArenaObjectID_nsStyleDisplay = 203,
-            eArenaObjectID_nsStyleContent = 204,
-            eArenaObjectID_nsStyleUIReset = 205,
-            eArenaObjectID_nsStyleTable = 206,
-            eArenaObjectID_nsStyleMargin = 207,
-            eArenaObjectID_nsStylePadding = 208,
-            eArenaObjectID_nsStyleBorder = 209,
-            eArenaObjectID_nsStyleOutline = 210,
-            eArenaObjectID_nsStyleXUL = 211,
-            eArenaObjectID_nsStyleSVGReset = 212,
-            eArenaObjectID_nsStyleColumn = 213,
-            eArenaObjectID_nsStyleEffects = 214,
-            eArenaObjectID_COUNT = 215,
+            eArenaObjectID_DummyBeforeFirstObjectID = 172,
+            eArenaObjectID_nsLineBox = 173,
+            eArenaObjectID_nsRuleNode = 174,
+            eArenaObjectID_nsStyleContext = 175,
+            eArenaObjectID_DisplayItemData = 176,
+            eArenaObjectID_nsInheritedStyleData = 177,
+            eArenaObjectID_nsResetStyleData = 178,
+            eArenaObjectID_nsConditionalResetStyleData = 179,
+            eArenaObjectID_nsConditionalResetStyleDataEntry = 180,
+            eArenaObjectID_nsFrameList = 181,
+            eArenaObjectID_CustomCounterStyle = 182,
+            eArenaObjectID_DependentBuiltinCounterStyle = 183,
+            eArenaObjectID_nsCallbackEventRequest = 184,
+            eArenaObjectID_nsIntervalSet_Interval = 185,
+            eArenaObjectID_CellData = 186,
+            eArenaObjectID_BCCellData = 187,
+            eArenaObjectID_nsStyleFont = 188,
+            eArenaObjectID_nsStyleColor = 189,
+            eArenaObjectID_nsStyleList = 190,
+            eArenaObjectID_nsStyleText = 191,
+            eArenaObjectID_nsStyleVisibility = 192,
+            eArenaObjectID_nsStyleUserInterface = 193,
+            eArenaObjectID_nsStyleTableBorder = 194,
+            eArenaObjectID_nsStyleSVG = 195,
+            eArenaObjectID_nsStyleVariables = 196,
+            eArenaObjectID_nsStyleBackground = 197,
+            eArenaObjectID_nsStylePosition = 198,
+            eArenaObjectID_nsStyleTextReset = 199,
+            eArenaObjectID_nsStyleDisplay = 200,
+            eArenaObjectID_nsStyleContent = 201,
+            eArenaObjectID_nsStyleUIReset = 202,
+            eArenaObjectID_nsStyleTable = 203,
+            eArenaObjectID_nsStyleMargin = 204,
+            eArenaObjectID_nsStylePadding = 205,
+            eArenaObjectID_nsStyleBorder = 206,
+            eArenaObjectID_nsStyleOutline = 207,
+            eArenaObjectID_nsStyleXUL = 208,
+            eArenaObjectID_nsStyleSVGReset = 209,
+            eArenaObjectID_nsStyleColumn = 210,
+            eArenaObjectID_nsStyleEffects = 211,
+            eArenaObjectID_COUNT = 212,
         }
         #[repr(C)]
         #[derive(Debug, Copy)]
         pub struct MallocAllocPolicy {
             pub _address: u8,
         }
         #[test]
         fn bindgen_test_layout_MallocAllocPolicy() {
@@ -2186,27 +2191,39 @@ pub mod root {
             }
             pub type IntRectTyped_Super = u8;
             pub type IntRectTyped_Self = u8;
             pub type IntRectTyped_ToInt = u32;
             pub type IntRect = [u32; 4usize];
             #[repr(C)]
             #[derive(Debug, Copy)]
             pub struct FontVariation {
-                pub _bindgen_opaque_blob: [u32; 2usize],
+                pub mTag: u32,
+                pub mValue: f32,
             }
             #[test]
             fn bindgen_test_layout_FontVariation() {
                 assert_eq!(::std::mem::size_of::<FontVariation>() , 8usize ,
                            concat ! (
                            "Size of: " , stringify ! ( FontVariation ) ));
                 assert_eq! (::std::mem::align_of::<FontVariation>() , 4usize ,
                             concat ! (
                             "Alignment of " , stringify ! ( FontVariation )
                             ));
+                assert_eq! (unsafe {
+                            & ( * ( 0 as * const FontVariation ) ) . mTag as *
+                            const _ as usize } , 0usize , concat ! (
+                            "Alignment of field: " , stringify ! (
+                            FontVariation ) , "::" , stringify ! ( mTag ) ));
+                assert_eq! (unsafe {
+                            & ( * ( 0 as * const FontVariation ) ) . mValue as
+                            * const _ as usize } , 4usize , concat ! (
+                            "Alignment of field: " , stringify ! (
+                            FontVariation ) , "::" , stringify ! ( mValue )
+                            ));
             }
             impl Clone for FontVariation {
                 fn clone(&self) -> Self { *self }
             }
             pub type Matrix4x4 = [u32; 16usize];
             #[repr(C)]
             #[derive(Debug, Copy, Clone)]
             pub struct ScaleFactor {
@@ -8252,17 +8269,24 @@ pub mod root {
         impl Clone for CounterStyle {
             fn clone(&self) -> Self { *self }
         }
         #[repr(C)]
         #[derive(Debug)]
         pub struct CounterStylePtr {
             pub mRaw: usize,
         }
-        pub const CounterStylePtr_kAnonymousFlag: usize = 1;
+        #[repr(u64)]
+        #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+        pub enum CounterStylePtr_Type {
+            eCounterStyle = 0,
+            eAnonymousCounterStyle = 1,
+            eUnresolvedAtom = 2,
+            eMask = 3,
+        }
         #[test]
         fn bindgen_test_layout_CounterStylePtr() {
             assert_eq!(::std::mem::size_of::<CounterStylePtr>() , 8usize ,
                        concat ! (
                        "Size of: " , stringify ! ( CounterStylePtr ) ));
             assert_eq! (::std::mem::align_of::<CounterStylePtr>() , 8usize ,
                         concat ! (
                         "Alignment of " , stringify ! ( CounterStylePtr ) ));
@@ -11132,178 +11156,321 @@ pub mod root {
         nsBoxFrame_id = 7,
         nsBulletFrame_id = 8,
         nsButtonBoxFrame_id = 9,
         nsCanvasFrame_id = 10,
         nsColorControlFrame_id = 11,
         nsColumnSetFrame_id = 12,
         nsComboboxControlFrame_id = 13,
         nsComboboxDisplayFrame_id = 14,
-        nsContainerFrame_id = 15,
-        nsContinuingTextFrame_id = 16,
-        nsDateTimeControlFrame_id = 17,
-        nsDeckFrame_id = 18,
-        nsDocElementBoxFrame_id = 19,
-        nsFieldSetFrame_id = 20,
-        nsFileControlFrame_id = 21,
-        nsFirstLetterFrame_id = 22,
-        nsFirstLineFrame_id = 23,
-        nsFlexContainerFrame_id = 24,
-        nsFormControlFrame_id = 25,
-        nsFrame_id = 26,
-        nsGfxButtonControlFrame_id = 27,
-        nsGfxCheckboxControlFrame_id = 28,
-        nsGfxRadioControlFrame_id = 29,
-        nsGridContainerFrame_id = 30,
-        nsGridRowGroupFrame_id = 31,
-        nsGridRowLeafFrame_id = 32,
-        nsGroupBoxFrame_id = 33,
-        nsHTMLButtonControlFrame_id = 34,
-        nsHTMLCanvasFrame_id = 35,
-        nsHTMLFramesetBlankFrame_id = 36,
-        nsHTMLFramesetBorderFrame_id = 37,
-        nsHTMLFramesetFrame_id = 38,
-        nsHTMLScrollFrame_id = 39,
-        nsIAnonymousContentCreator_id = 40,
-        nsIComboboxControlFrame_id = 41,
-        nsIFormControlFrame_id = 42,
-        nsIFrame_id = 43,
-        nsIFrameFrame_id = 44,
-        nsIListControlFrame_id = 45,
-        nsIMathMLFrame_id = 46,
-        nsIMenuFrame_id = 47,
-        nsIObjectFrame_id = 48,
-        nsIPageSequenceFrame_id = 49,
-        nsIPercentBSizeObserver_id = 50,
-        nsIRootBox_id = 51,
-        nsSVGDisplayableFrame_id = 52,
-        nsISVGSVGFrame_id = 53,
-        nsIScrollableFrame_id = 54,
-        nsIScrollbarMediator_id = 55,
-        nsISelectControlFrame_id = 56,
-        nsIStatefulFrame_id = 57,
-        nsITableCellLayout_id = 58,
-        nsITableLayout_id = 59,
-        nsITextControlFrame_id = 60,
-        nsITreeBoxObject_id = 61,
-        nsImageBoxFrame_id = 62,
-        nsImageControlFrame_id = 63,
-        nsImageFrame_id = 64,
-        nsInlineFrame_id = 65,
-        nsLeafBoxFrame_id = 66,
-        nsLeafFrame_id = 67,
-        nsLegendFrame_id = 68,
-        nsListBoxBodyFrame_id = 69,
-        nsListControlFrame_id = 70,
-        nsListItemFrame_id = 71,
-        nsMathMLContainerFrame_id = 72,
-        nsMathMLFrame_id = 73,
-        nsMathMLmactionFrame_id = 74,
-        nsMathMLmathBlockFrame_id = 75,
-        nsMathMLmathInlineFrame_id = 76,
-        nsMathMLmencloseFrame_id = 77,
-        nsMathMLmfencedFrame_id = 78,
-        nsMathMLmfracFrame_id = 79,
-        nsMathMLmmultiscriptsFrame_id = 80,
-        nsMathMLmoFrame_id = 81,
-        nsMathMLmoverFrame_id = 82,
-        nsMathMLmpaddedFrame_id = 83,
-        nsMathMLmrootFrame_id = 84,
-        nsMathMLmrowFrame_id = 85,
-        nsMathMLmspaceFrame_id = 86,
-        nsMathMLmsqrtFrame_id = 87,
-        nsMathMLmstyleFrame_id = 88,
-        nsMathMLmtableFrame_id = 89,
-        nsMathMLmtableWrapperFrame_id = 90,
-        nsMathMLmtdFrame_id = 91,
-        nsMathMLmtdInnerFrame_id = 92,
-        nsMathMLmtrFrame_id = 93,
-        nsMathMLmunderFrame_id = 94,
-        nsMathMLmunderoverFrame_id = 95,
-        nsMathMLsemanticsFrame_id = 96,
-        nsMathMLTokenFrame_id = 97,
-        nsMenuBarFrame_id = 98,
-        nsMenuFrame_id = 99,
-        nsMenuPopupFrame_id = 100,
-        nsMeterFrame_id = 101,
-        nsNumberControlFrame_id = 102,
-        nsPluginFrame_id = 103,
-        nsPageBreakFrame_id = 104,
-        nsPageContentFrame_id = 105,
-        nsPageFrame_id = 106,
-        nsPlaceholderFrame_id = 107,
-        nsPopupSetFrame_id = 108,
-        nsProgressFrame_id = 109,
-        nsProgressMeterFrame_id = 110,
-        nsRangeFrame_id = 111,
-        nsResizerFrame_id = 112,
-        nsRootBoxFrame_id = 113,
-        nsRubyBaseContainerFrame_id = 114,
-        nsRubyBaseFrame_id = 115,
-        nsRubyContentFrame_id = 116,
-        nsRubyFrame_id = 117,
-        nsRubyTextContainerFrame_id = 118,
-        nsRubyTextFrame_id = 119,
-        nsScrollbarButtonFrame_id = 120,
-        nsScrollbarFrame_id = 121,
-        nsSelectsAreaFrame_id = 122,
-        nsSimplePageSequenceFrame_id = 123,
-        nsSliderFrame_id = 124,
-        nsSplittableFrame_id = 125,
-        nsSplitterFrame_id = 126,
-        nsStackFrame_id = 127,
-        nsSubDocumentFrame_id = 128,
-        nsSVGAFrame_id = 129,
-        nsSVGClipPathFrame_id = 130,
-        nsSVGContainerFrame_id = 131,
-        nsSVGDisplayContainerFrame_id = 132,
-        SVGFEContainerFrame_id = 133,
-        SVGFEImageFrame_id = 134,
-        SVGFELeafFrame_id = 135,
-        SVGFEUnstyledLeafFrame_id = 136,
-        nsSVGFilterFrame_id = 137,
-        nsSVGForeignObjectFrame_id = 138,
-        nsSVGGenericContainerFrame_id = 139,
-        nsSVGGFrame_id = 140,
-        nsSVGGradientFrame_id = 141,
-        nsSVGImageFrame_id = 142,
-        nsSVGInnerSVGFrame_id = 143,
-        nsSVGLinearGradientFrame_id = 144,
-        nsSVGMarkerFrame_id = 145,
-        nsSVGMarkerAnonChildFrame_id = 146,
-        nsSVGMaskFrame_id = 147,
-        nsSVGOuterSVGFrame_id = 148,
-        nsSVGOuterSVGAnonChildFrame_id = 149,
-        nsSVGPaintServerFrame_id = 150,
-        SVGGeometryFrame_id = 151,
-        nsSVGPatternFrame_id = 152,
-        nsSVGRadialGradientFrame_id = 153,
-        nsSVGStopFrame_id = 154,
-        nsSVGSwitchFrame_id = 155,
-        SVGTextFrame_id = 156,
-        nsSVGUseFrame_id = 157,
-        SVGViewFrame_id = 158,
-        nsTableCellFrame_id = 159,
-        nsTableColFrame_id = 160,
-        nsTableColGroupFrame_id = 161,
-        nsTableFrame_id = 162,
-        nsTableWrapperFrame_id = 163,
-        nsTableRowFrame_id = 164,
-        nsTableRowGroupFrame_id = 165,
-        nsTextBoxFrame_id = 166,
-        nsTextControlFrame_id = 167,
-        nsTextFrame_id = 168,
-        nsTitleBarFrame_id = 169,
-        nsTreeBodyFrame_id = 170,
-        nsTreeColFrame_id = 171,
-        nsVideoFrame_id = 172,
-        nsXULLabelFrame_id = 173,
-        nsXULScrollFrame_id = 174,
-        ViewportFrame_id = 175,
-        NON_FRAME_MARKER = 176,
+        nsContinuingTextFrame_id = 15,
+        nsDateTimeControlFrame_id = 16,
+        nsDeckFrame_id = 17,
+        nsDocElementBoxFrame_id = 18,
+        nsFieldSetFrame_id = 19,
+        nsFileControlFrame_id = 20,
+        nsFirstLetterFrame_id = 21,
+        nsFirstLineFrame_id = 22,
+        nsFlexContainerFrame_id = 23,
+        nsFrame_id = 24,
+        nsGfxButtonControlFrame_id = 25,
+        nsGfxCheckboxControlFrame_id = 26,
+        nsGfxRadioControlFrame_id = 27,
+        nsGridContainerFrame_id = 28,
+        nsGridRowGroupFrame_id = 29,
+        nsGridRowLeafFrame_id = 30,
+        nsGroupBoxFrame_id = 31,
+        nsHTMLButtonControlFrame_id = 32,
+        nsHTMLCanvasFrame_id = 33,
+        nsHTMLFramesetBlankFrame_id = 34,
+        nsHTMLFramesetBorderFrame_id = 35,
+        nsHTMLFramesetFrame_id = 36,
+        nsHTMLScrollFrame_id = 37,
+        nsImageBoxFrame_id = 38,
+        nsImageControlFrame_id = 39,
+        nsImageFrame_id = 40,
+        nsInlineFrame_id = 41,
+        nsLeafBoxFrame_id = 42,
+        nsLegendFrame_id = 43,
+        nsListBoxBodyFrame_id = 44,
+        nsListControlFrame_id = 45,
+        nsListItemFrame_id = 46,
+        nsMathMLFrame_id = 47,
+        nsMathMLmactionFrame_id = 48,
+        nsMathMLmathBlockFrame_id = 49,
+        nsMathMLmathInlineFrame_id = 50,
+        nsMathMLmencloseFrame_id = 51,
+        nsMathMLmfencedFrame_id = 52,
+        nsMathMLmfracFrame_id = 53,
+        nsMathMLmmultiscriptsFrame_id = 54,
+        nsMathMLmoFrame_id = 55,
+        nsMathMLmpaddedFrame_id = 56,
+        nsMathMLmrootFrame_id = 57,
+        nsMathMLmrowFrame_id = 58,
+        nsMathMLmspaceFrame_id = 59,
+        nsMathMLmsqrtFrame_id = 60,
+        nsMathMLmtableFrame_id = 61,
+        nsMathMLmtableWrapperFrame_id = 62,
+        nsMathMLmtdFrame_id = 63,
+        nsMathMLmtdInnerFrame_id = 64,
+        nsMathMLmtrFrame_id = 65,
+        nsMathMLmunderoverFrame_id = 66,
+        nsMathMLsemanticsFrame_id = 67,
+        nsMathMLTokenFrame_id = 68,
+        nsMenuBarFrame_id = 69,
+        nsMenuFrame_id = 70,
+        nsMenuPopupFrame_id = 71,
+        nsMeterFrame_id = 72,
+        nsNumberControlFrame_id = 73,
+        nsPluginFrame_id = 74,
+        nsPageBreakFrame_id = 75,
+        nsPageContentFrame_id = 76,
+        nsPageFrame_id = 77,
+        nsPlaceholderFrame_id = 78,
+        nsPopupSetFrame_id = 79,
+        nsProgressFrame_id = 80,
+        nsProgressMeterFrame_id = 81,
+        nsRangeFrame_id = 82,
+        nsResizerFrame_id = 83,
+        nsRootBoxFrame_id = 84,
+        nsRubyBaseContainerFrame_id = 85,
+        nsRubyBaseFrame_id = 86,
+        nsRubyFrame_id = 87,
+        nsRubyTextContainerFrame_id = 88,
+        nsRubyTextFrame_id = 89,
+        nsScrollbarButtonFrame_id = 90,
+        nsScrollbarFrame_id = 91,
+        nsSelectsAreaFrame_id = 92,
+        nsSimplePageSequenceFrame_id = 93,
+        nsSliderFrame_id = 94,
+        nsSplitterFrame_id = 95,
+        nsStackFrame_id = 96,
+        nsSubDocumentFrame_id = 97,
+        nsSVGAFrame_id = 98,
+        nsSVGClipPathFrame_id = 99,
+        nsSVGContainerFrame_id = 100,
+        SVGFEContainerFrame_id = 101,
+        SVGFEImageFrame_id = 102,
+        SVGFELeafFrame_id = 103,
+        SVGFEUnstyledLeafFrame_id = 104,
+        nsSVGFilterFrame_id = 105,
+        nsSVGForeignObjectFrame_id = 106,
+        nsSVGGenericContainerFrame_id = 107,
+        nsSVGGFrame_id = 108,
+        nsSVGImageFrame_id = 109,
+        nsSVGInnerSVGFrame_id = 110,
+        nsSVGLinearGradientFrame_id = 111,
+        nsSVGMarkerFrame_id = 112,
+        nsSVGMarkerAnonChildFrame_id = 113,
+        nsSVGMaskFrame_id = 114,
+        nsSVGOuterSVGFrame_id = 115,
+        nsSVGOuterSVGAnonChildFrame_id = 116,
+        SVGGeometryFrame_id = 117,
+        nsSVGPatternFrame_id = 118,
+        nsSVGRadialGradientFrame_id = 119,
+        nsSVGStopFrame_id = 120,
+        nsSVGSwitchFrame_id = 121,
+        SVGTextFrame_id = 122,
+        nsSVGUseFrame_id = 123,
+        SVGViewFrame_id = 124,
+        nsTableCellFrame_id = 125,
+        nsTableColFrame_id = 126,
+        nsTableColGroupFrame_id = 127,
+        nsTableFrame_id = 128,
+        nsTableWrapperFrame_id = 129,
+        nsTableRowFrame_id = 130,
+        nsTableRowGroupFrame_id = 131,
+        nsTextBoxFrame_id = 132,
+        nsTextControlFrame_id = 133,
+        nsTextFrame_id = 134,
+        nsTitleBarFrame_id = 135,
+        nsTreeBodyFrame_id = 136,
+        nsTreeColFrame_id = 137,
+        nsVideoFrame_id = 138,
+        nsXULLabelFrame_id = 139,
+        nsXULScrollFrame_id = 140,
+        ViewportFrame_id = 141,
+        nsContainerFrame_id = 142,
+        nsFormControlFrame_id = 143,
+        nsIFrame_id = 144,
+        nsLeafFrame_id = 145,
+        nsMathMLContainerFrame_id = 146,
+        nsRubyContentFrame_id = 147,
+        nsSplittableFrame_id = 148,
+        nsSVGDisplayContainerFrame_id = 149,
+        nsSVGGradientFrame_id = 150,
+        nsSVGPaintServerFrame_id = 151,
+        nsIAnonymousContentCreator_id = 152,
+        nsIComboboxControlFrame_id = 153,
+        nsIFormControlFrame_id = 154,
+        nsIFrameFrame_id = 155,
+        nsIListControlFrame_id = 156,
+        nsIMathMLFrame_id = 157,
+        nsIMenuFrame_id = 158,
+        nsIObjectFrame_id = 159,
+        nsIPageSequenceFrame_id = 160,
+        nsIPercentBSizeObserver_id = 161,
+        nsIRootBox_id = 162,
+        nsIScrollableFrame_id = 163,
+        nsIScrollbarMediator_id = 164,
+        nsISelectControlFrame_id = 165,
+        nsISVGSVGFrame_id = 166,
+        nsIStatefulFrame_id = 167,
+        nsITableCellLayout_id = 168,
+        nsITableLayout_id = 169,
+        nsITextControlFrame_id = 170,
+        nsITreeBoxObject_id = 171,
+        nsSVGDisplayableFrame_id = 172,
+        NON_FRAME_MARKER = 173,
+    }
+    #[repr(u8)]
+    #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+    pub enum nsQueryFrame_ClassID {
+        BRFrame_id = 0,
+        DetailsFrame_id = 1,
+        nsAutoRepeatBoxFrame_id = 2,
+        nsBCTableCellFrame_id = 3,
+        nsBackdropFrame_id = 4,
+        nsBlockFrame_id = 5,
+        nsBox_id = 6,
+        nsBoxFrame_id = 7,
+        nsBulletFrame_id = 8,
+        nsButtonBoxFrame_id = 9,
+        nsCanvasFrame_id = 10,
+        nsColorControlFrame_id = 11,
+        nsColumnSetFrame_id = 12,
+        nsComboboxControlFrame_id = 13,
+        nsComboboxDisplayFrame_id = 14,
+        nsContinuingTextFrame_id = 15,
+        nsDateTimeControlFrame_id = 16,
+        nsDeckFrame_id = 17,
+        nsDocElementBoxFrame_id = 18,
+        nsFieldSetFrame_id = 19,
+        nsFileControlFrame_id = 20,
+        nsFirstLetterFrame_id = 21,
+        nsFirstLineFrame_id = 22,
+        nsFlexContainerFrame_id = 23,
+        nsFrame_id = 24,
+        nsGfxButtonControlFrame_id = 25,
+        nsGfxCheckboxControlFrame_id = 26,
+        nsGfxRadioControlFrame_id = 27,
+        nsGridContainerFrame_id = 28,
+        nsGridRowGroupFrame_id = 29,
+        nsGridRowLeafFrame_id = 30,
+        nsGroupBoxFrame_id = 31,
+        nsHTMLButtonControlFrame_id = 32,
+        nsHTMLCanvasFrame_id = 33,
+        nsHTMLFramesetBlankFrame_id = 34,
+        nsHTMLFramesetBorderFrame_id = 35,
+        nsHTMLFramesetFrame_id = 36,
+        nsHTMLScrollFrame_id = 37,
+        nsImageBoxFrame_id = 38,
+        nsImageControlFrame_id = 39,
+        nsImageFrame_id = 40,
+        nsInlineFrame_id = 41,
+        nsLeafBoxFrame_id = 42,
+        nsLegendFrame_id = 43,
+        nsListBoxBodyFrame_id = 44,
+        nsListControlFrame_id = 45,
+        nsListItemFrame_id = 46,
+        nsMathMLFrame_id = 47,
+        nsMathMLmactionFrame_id = 48,
+        nsMathMLmathBlockFrame_id = 49,
+        nsMathMLmathInlineFrame_id = 50,
+        nsMathMLmencloseFrame_id = 51,
+        nsMathMLmfencedFrame_id = 52,
+        nsMathMLmfracFrame_id = 53,
+        nsMathMLmmultiscriptsFrame_id = 54,
+        nsMathMLmoFrame_id = 55,
+        nsMathMLmpaddedFrame_id = 56,
+        nsMathMLmrootFrame_id = 57,
+        nsMathMLmrowFrame_id = 58,
+        nsMathMLmspaceFrame_id = 59,
+        nsMathMLmsqrtFrame_id = 60,
+        nsMathMLmtableFrame_id = 61,
+        nsMathMLmtableWrapperFrame_id = 62,
+        nsMathMLmtdFrame_id = 63,
+        nsMathMLmtdInnerFrame_id = 64,
+        nsMathMLmtrFrame_id = 65,
+        nsMathMLmunderoverFrame_id = 66,
+        nsMathMLsemanticsFrame_id = 67,
+        nsMathMLTokenFrame_id = 68,
+        nsMenuBarFrame_id = 69,
+        nsMenuFrame_id = 70,
+        nsMenuPopupFrame_id = 71,
+        nsMeterFrame_id = 72,
+        nsNumberControlFrame_id = 73,
+        nsPluginFrame_id = 74,
+        nsPageBreakFrame_id = 75,
+        nsPageContentFrame_id = 76,
+        nsPageFrame_id = 77,
+        nsPlaceholderFrame_id = 78,
+        nsPopupSetFrame_id = 79,
+        nsProgressFrame_id = 80,
+        nsProgressMeterFrame_id = 81,
+        nsRangeFrame_id = 82,
+        nsResizerFrame_id = 83,
+        nsRootBoxFrame_id = 84,
+        nsRubyBaseContainerFrame_id = 85,
+        nsRubyBaseFrame_id = 86,
+        nsRubyFrame_id = 87,
+        nsRubyTextContainerFrame_id = 88,
+        nsRubyTextFrame_id = 89,
+        nsScrollbarButtonFrame_id = 90,
+        nsScrollbarFrame_id = 91,
+        nsSelectsAreaFrame_id = 92,
+        nsSimplePageSequenceFrame_id = 93,
+        nsSliderFrame_id = 94,
+        nsSplitterFrame_id = 95,
+        nsStackFrame_id = 96,
+        nsSubDocumentFrame_id = 97,
+        nsSVGAFrame_id = 98,
+        nsSVGClipPathFrame_id = 99,
+        nsSVGContainerFrame_id = 100,
+        SVGFEContainerFrame_id = 101,
+        SVGFEImageFrame_id = 102,
+        SVGFELeafFrame_id = 103,
+        SVGFEUnstyledLeafFrame_id = 104,
+        nsSVGFilterFrame_id = 105,
+        nsSVGForeignObjectFrame_id = 106,
+        nsSVGGenericContainerFrame_id = 107,
+        nsSVGGFrame_id = 108,
+        nsSVGImageFrame_id = 109,
+        nsSVGInnerSVGFrame_id = 110,
+        nsSVGLinearGradientFrame_id = 111,
+        nsSVGMarkerFrame_id = 112,
+        nsSVGMarkerAnonChildFrame_id = 113,
+        nsSVGMaskFrame_id = 114,
+        nsSVGOuterSVGFrame_id = 115,
+        nsSVGOuterSVGAnonChildFrame_id = 116,
+        SVGGeometryFrame_id = 117,
+        nsSVGPatternFrame_id = 118,
+        nsSVGRadialGradientFrame_id = 119,
+        nsSVGStopFrame_id = 120,
+        nsSVGSwitchFrame_id = 121,
+        SVGTextFrame_id = 122,
+        nsSVGUseFrame_id = 123,
+        SVGViewFrame_id = 124,
+        nsTableCellFrame_id = 125,
+        nsTableColFrame_id = 126,
+        nsTableColGroupFrame_id = 127,
+        nsTableFrame_id = 128,
+        nsTableWrapperFrame_id = 129,
+        nsTableRowFrame_id = 130,
+        nsTableRowGroupFrame_id = 131,
+        nsTextBoxFrame_id = 132,
+        nsTextControlFrame_id = 133,
+        nsTextFrame_id = 134,
+        nsTitleBarFrame_id = 135,
+        nsTreeBodyFrame_id = 136,
+        nsTreeColFrame_id = 137,
+        nsVideoFrame_id = 138,
+        nsXULLabelFrame_id = 139,
+        nsXULScrollFrame_id = 140,
+        ViewportFrame_id = 141,
     }
     #[test]
     fn bindgen_test_layout_nsQueryFrame() {
         assert_eq!(::std::mem::size_of::<nsQueryFrame>() , 8usize , concat ! (
                    "Size of: " , stringify ! ( nsQueryFrame ) ));
         assert_eq! (::std::mem::align_of::<nsQueryFrame>() , 8usize , concat !
                     ( "Alignment of " , stringify ! ( nsQueryFrame ) ));
     }
@@ -15540,16 +15707,21 @@ pub mod root {
                     stringify ! ( mFirstChild ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsINode ) ) . mSlots as * const _ as
                     usize } , 80usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsINode ) , "::" ,
                     stringify ! ( mSlots ) ));
     }
     #[repr(C)]
+    #[derive(Debug, Copy, Clone)]
+    pub struct nsIRedirectHistoryEntry {
+        _unused: [u8; 0],
+    }
+    #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct JSErrorFormatString {
         /** The error message name in ASCII. */
         pub name: *const ::std::os::raw::c_char,
         /** The error format string in ASCII. */
         pub format: *const ::std::os::raw::c_char,
         /** The number of arguments to expand in the formatted error message. */
         pub argCount: u16,
@@ -22077,17 +22249,17 @@ pub mod root {
         pub static mut nsIPresShell_gCaptureInfo: root::CapturingContentInfo;
     }
     extern "C" {
         #[link_name = "_ZN12nsIPresShell14gKeyDownTargetE"]
         pub static mut nsIPresShell_gKeyDownTarget: *mut root::nsIContent;
     }
     #[test]
     fn bindgen_test_layout_nsIPresShell() {
-        assert_eq!(::std::mem::size_of::<nsIPresShell>() , 5504usize , concat
+        assert_eq!(::std::mem::size_of::<nsIPresShell>() , 5432usize , concat
                    ! ( "Size of: " , stringify ! ( nsIPresShell ) ));
         assert_eq! (::std::mem::align_of::<nsIPresShell>() , 8usize , concat !
                     ( "Alignment of " , stringify ! ( nsIPresShell ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) . mDocument as *
                     const _ as usize } , 8usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mDocument ) ));
@@ -22113,157 +22285,157 @@ pub mod root {
                     "::" , stringify ! ( mViewManager ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) . mFrameArena as *
                     const _ as usize } , 48usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mFrameArena ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) . mSelection as *
-                    const _ as usize } , 5288usize , concat ! (
+                    const _ as usize } , 5216usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mSelection ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) . mFrameManager as *
-                    const _ as usize } , 5296usize , concat ! (
+                    const _ as usize } , 5224usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mFrameManager ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) .
-                    mForwardingContainer as * const _ as usize } , 5304usize ,
+                    mForwardingContainer as * const _ as usize } , 5232usize ,
                     concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mForwardingContainer ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) . mDocAccessible as
-                    * const _ as usize } , 5312usize , concat ! (
+                    * const _ as usize } , 5240usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mDocAccessible ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) .
-                    mReflowContinueTimer as * const _ as usize } , 5320usize ,
+                    mReflowContinueTimer as * const _ as usize } , 5248usize ,
                     concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mReflowContinueTimer ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) .
-                    mDrawEventTargetFrame as * const _ as usize } , 5328usize
+                    mDrawEventTargetFrame as * const _ as usize } , 5256usize
                     , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mDrawEventTargetFrame ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) . mAllocatedPointers
-                    as * const _ as usize } , 5336usize , concat ! (
+                    as * const _ as usize } , 5264usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mAllocatedPointers ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) . mPaintCount as *
-                    const _ as usize } , 5384usize , concat ! (
+                    const _ as usize } , 5312usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mPaintCount ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) .
                     mScrollPositionClampingScrollPortSize as * const _ as
-                    usize } , 5392usize , concat ! (
+                    usize } , 5320usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mScrollPositionClampingScrollPortSize
                     ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) . mAutoWeakFrames as
-                    * const _ as usize } , 5400usize , concat ! (
+                    * const _ as usize } , 5328usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mAutoWeakFrames ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) . mWeakFrames as *
-                    const _ as usize } , 5408usize , concat ! (
+                    const _ as usize } , 5336usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mWeakFrames ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) .
-                    mCanvasBackgroundColor as * const _ as usize } , 5456usize
+                    mCanvasBackgroundColor as * const _ as usize } , 5384usize
                     , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mCanvasBackgroundColor ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) . mResolution as *
-                    const _ as usize } , 5460usize , concat ! (
+                    const _ as usize } , 5388usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mResolution ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) . mSelectionFlags as
-                    * const _ as usize } , 5468usize , concat ! (
+                    * const _ as usize } , 5396usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mSelectionFlags ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) . mRenderFlags as *
-                    const _ as usize } , 5470usize , concat ! (
+                    const _ as usize } , 5398usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mRenderFlags ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) . mPresShellId as *
-                    const _ as usize } , 5476usize , concat ! (
+                    const _ as usize } , 5404usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mPresShellId ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) .
                     mFontSizeInflationEmPerLine as * const _ as usize } ,
-                    5480usize , concat ! (
+                    5408usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mFontSizeInflationEmPerLine ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) .
                     mFontSizeInflationMinTwips as * const _ as usize } ,
-                    5484usize , concat ! (
+                    5412usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mFontSizeInflationMinTwips ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) .
                     mFontSizeInflationLineThreshold as * const _ as usize } ,
-                    5488usize , concat ! (
+                    5416usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mFontSizeInflationLineThreshold ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) .
                     mFontSizeInflationForceEnabled as * const _ as usize } ,
-                    5492usize , concat ! (
+                    5420usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mFontSizeInflationForceEnabled ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) .
                     mFontSizeInflationDisabledInMasterProcess as * const _ as
-                    usize } , 5493usize , concat ! (
+                    usize } , 5421usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! (
                     mFontSizeInflationDisabledInMasterProcess ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) .
                     mFontSizeInflationEnabled as * const _ as usize } ,
-                    5494usize , concat ! (
+                    5422usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mFontSizeInflationEnabled ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) .
                     mFontSizeInflationEnabledIsDirty as * const _ as usize } ,
-                    5495usize , concat ! (
+                    5423usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mFontSizeInflationEnabledIsDirty )
                     ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) . mPaintingIsFrozen
-                    as * const _ as usize } , 5496usize , concat ! (
+                    as * const _ as usize } , 5424usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mPaintingIsFrozen ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) . mIsNeverPainting
-                    as * const _ as usize } , 5497usize , concat ! (
+                    as * const _ as usize } , 5425usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mIsNeverPainting ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsIPresShell ) ) . mInFlush as *
-                    const _ as usize } , 5498usize , concat ! (
+                    const _ as usize } , 5426usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsIPresShell ) ,
                     "::" , stringify ! ( mInFlush ) ));
     }
     impl nsIPresShell {
         #[inline]
         pub fn mDidInitialize(&self) -> bool {
             let mask = 1usize as u8;
             let unit_field_val: u8 =
@@ -23217,17 +23389,17 @@ pub mod root {
     #[derive(Debug)]
     pub struct nsClassHashtable_EntryPtr {
         pub mEntry: *mut root::nsClassHashtable_base_type,
         pub mTable: *mut root::nsClassHashtable_base_type,
         pub mTableGeneration: u32,
     }
     #[repr(C)]
     pub struct nsPresArena {
-        pub mFreeLists: [root::nsPresArena_FreeList; 215usize],
+        pub mFreeLists: [root::nsPresArena_FreeList; 212usize],
         pub mPool: [u64; 4usize],
         pub mArenaRefPtrs: [u64; 6usize],
     }
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsPresArena_FreeList {
         pub mEntries: root::nsTArray<*mut ::std::os::raw::c_void>,
         pub mEntrySize: usize,
@@ -23258,33 +23430,33 @@ pub mod root {
                     mEntriesEverAllocated as * const _ as usize } , 16usize ,
                     concat ! (
                     "Alignment of field: " , stringify ! (
                     nsPresArena_FreeList ) , "::" , stringify ! (
                     mEntriesEverAllocated ) ));
     }
     #[test]
     fn bindgen_test_layout_nsPresArena() {
-        assert_eq!(::std::mem::size_of::<nsPresArena>() , 5240usize , concat !
+        assert_eq!(::std::mem::size_of::<nsPresArena>() , 5168usize , concat !
                    ( "Size of: " , stringify ! ( nsPresArena ) ));
         assert_eq! (::std::mem::align_of::<nsPresArena>() , 8usize , concat !
                     ( "Alignment of " , stringify ! ( nsPresArena ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsPresArena ) ) . mFreeLists as *
                     const _ as usize } , 0usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsPresArena ) ,
                     "::" , stringify ! ( mFreeLists ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsPresArena ) ) . mPool as * const _
-                    as usize } , 5160usize , concat ! (
+                    as usize } , 5088usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsPresArena ) ,
                     "::" , stringify ! ( mPool ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsPresArena ) ) . mArenaRefPtrs as *
-                    const _ as usize } , 5192usize , concat ! (
+                    const _ as usize } , 5120usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsPresArena ) ,
                     "::" , stringify ! ( mArenaRefPtrs ) ));
     }
     #[repr(C)]
     #[derive(Debug, Copy, Clone)]
     pub struct nsArenaMemoryStats {
         _unused: [u8; 0],
     }
@@ -24012,23 +24184,31 @@ pub mod root {
         nsITimer__bindgen_ty_1::TYPE_ONE_SHOT;
     pub const nsITimer_TYPE_REPEATING_SLACK: root::nsITimer__bindgen_ty_1 =
         nsITimer__bindgen_ty_1::TYPE_REPEATING_SLACK;
     pub const nsITimer_TYPE_REPEATING_PRECISE: root::nsITimer__bindgen_ty_1 =
         nsITimer__bindgen_ty_1::TYPE_REPEATING_PRECISE;
     pub const nsITimer_TYPE_REPEATING_PRECISE_CAN_SKIP:
               root::nsITimer__bindgen_ty_1 =
         nsITimer__bindgen_ty_1::TYPE_REPEATING_PRECISE_CAN_SKIP;
+    pub const nsITimer_TYPE_REPEATING_SLACK_LOW_PRIORITY:
+              root::nsITimer__bindgen_ty_1 =
+        nsITimer__bindgen_ty_1::TYPE_REPEATING_SLACK_LOW_PRIORITY;
+    pub const nsITimer_TYPE_ONE_SHOT_LOW_PRIORITY:
+              root::nsITimer__bindgen_ty_1 =
+        nsITimer__bindgen_ty_1::TYPE_ONE_SHOT_LOW_PRIORITY;
     #[repr(u32)]
     #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
     pub enum nsITimer__bindgen_ty_1 {
         TYPE_ONE_SHOT = 0,
         TYPE_REPEATING_SLACK = 1,
         TYPE_REPEATING_PRECISE = 2,
         TYPE_REPEATING_PRECISE_CAN_SKIP = 3,
+        TYPE_REPEATING_SLACK_LOW_PRIORITY = 4,
+        TYPE_ONE_SHOT_LOW_PRIORITY = 5,
     }
     #[test]
     fn bindgen_test_layout_nsITimer() {
         assert_eq!(::std::mem::size_of::<nsITimer>() , 8usize , concat ! (
                    "Size of: " , stringify ! ( nsITimer ) ));
         assert_eq! (::std::mem::align_of::<nsITimer>() , 8usize , concat ! (
                     "Alignment of " , stringify ! ( nsITimer ) ));
     }
@@ -30821,65 +31001,59 @@ pub mod root {
                    "Alignment of template specialization: " , stringify ! (
                    root::mozilla::StaticRefPtr<root::nsStyleQuoteValues> ) ));
     }
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsStyleList {
         pub mListStylePosition: u8,
         pub mListStyleImage: root::RefPtr<root::nsStyleImageRequest>,
-        pub mListStyleType: root::nsCOMPtr<root::nsIAtom>,
         pub mCounterStyle: root::mozilla::CounterStylePtr,
         pub mQuotes: root::RefPtr<root::nsStyleQuoteValues>,
         pub mImageRegion: root::nsRect,
     }
     extern "C" {
         #[link_name = "_ZN11nsStyleList14sInitialQuotesE"]
         pub static mut nsStyleList_sInitialQuotes:
                    root::mozilla::StaticRefPtr<root::nsStyleQuoteValues>;
     }
     extern "C" {
         #[link_name = "_ZN11nsStyleList11sNoneQuotesE"]
         pub static mut nsStyleList_sNoneQuotes:
                    root::mozilla::StaticRefPtr<root::nsStyleQuoteValues>;
     }
     #[test]
     fn bindgen_test_layout_nsStyleList() {
-        assert_eq!(::std::mem::size_of::<nsStyleList>() , 56usize , concat ! (
+        assert_eq!(::std::mem::size_of::<nsStyleList>() , 48usize , concat ! (
                    "Size of: " , stringify ! ( nsStyleList ) ));
         assert_eq! (::std::mem::align_of::<nsStyleList>() , 8usize , concat !
                     ( "Alignment of " , stringify ! ( nsStyleList ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsStyleList ) ) . mListStylePosition
                     as * const _ as usize } , 0usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsStyleList ) ,
                     "::" , stringify ! ( mListStylePosition ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsStyleList ) ) . mListStyleImage as
                     * const _ as usize } , 8usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsStyleList ) ,
                     "::" , stringify ! ( mListStyleImage ) ));
         assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsStyleList ) ) . mListStyleType as *
+                    & ( * ( 0 as * const nsStyleList ) ) . mCounterStyle as *
                     const _ as usize } , 16usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsStyleList ) ,
-                    "::" , stringify ! ( mListStyleType ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsStyleList ) ) . mCounterStyle as *
-                    const _ as usize } , 24usize , concat ! (
-                    "Alignment of field: " , stringify ! ( nsStyleList ) ,
                     "::" , stringify ! ( mCounterStyle ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsStyleList ) ) . mQuotes as * const
-                    _ as usize } , 32usize , concat ! (
+                    _ as usize } , 24usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsStyleList ) ,
                     "::" , stringify ! ( mQuotes ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsStyleList ) ) . mImageRegion as *
-                    const _ as usize } , 40usize , concat ! (
+                    const _ as usize } , 32usize , concat ! (
                     "Alignment of field: " , stringify ! ( nsStyleList ) ,
                     "::" , stringify ! ( mImageRegion ) ));
     }
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsStyleGridLine {
         pub mHasSpan: bool,
         pub mInteger: i32,
@@ -31918,25 +32092,24 @@ pub mod root {
         pub mContent: root::nsStyleContentData__bindgen_ty_1,
     }
     #[repr(C)]
     #[derive(Debug)]
     pub struct nsStyleContentData_CounterFunction {
         pub mIdent: ::nsstring::nsStringRepr,
         pub mSeparator: ::nsstring::nsStringRepr,
         pub mCounterStyle: root::mozilla::CounterStylePtr,
-        pub mCounterStyleName: root::nsCOMPtr<root::nsIAtom>,
         pub mRefCnt: root::mozilla::ThreadSafeAutoRefCnt,
     }
     pub type nsStyleContentData_CounterFunction_HasThreadSafeRefCnt =
         root::mozilla::TrueType;
     #[test]
     fn bindgen_test_layout_nsStyleContentData_CounterFunction() {
         assert_eq!(::std::mem::size_of::<nsStyleContentData_CounterFunction>()
-                   , 56usize , concat ! (
+                   , 48usize , concat ! (
                    "Size of: " , stringify ! (
                    nsStyleContentData_CounterFunction ) ));
         assert_eq! (::std::mem::align_of::<nsStyleContentData_CounterFunction>()
                     , 8usize , concat ! (
                     "Alignment of " , stringify ! (
                     nsStyleContentData_CounterFunction ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsStyleContentData_CounterFunction )
@@ -31955,24 +32128,17 @@ pub mod root {
                     & ( * ( 0 as * const nsStyleContentData_CounterFunction )
                     ) . mCounterStyle as * const _ as usize } , 32usize ,
                     concat ! (
                     "Alignment of field: " , stringify ! (
                     nsStyleContentData_CounterFunction ) , "::" , stringify !
                     ( mCounterStyle ) ));
         assert_eq! (unsafe {
                     & ( * ( 0 as * const nsStyleContentData_CounterFunction )
-                    ) . mCounterStyleName as * const _ as usize } , 40usize ,
-                    concat ! (
-                    "Alignment of field: " , stringify ! (
-                    nsStyleContentData_CounterFunction ) , "::" , stringify !
-                    ( mCounterStyleName ) ));
-        assert_eq! (unsafe {
-                    & ( * ( 0 as * const nsStyleContentData_CounterFunction )
-                    ) . mRefCnt as * const _ as usize } , 48usize , concat ! (
+                    ) . mRefCnt as * const _ as usize } , 40usize , concat ! (
                     "Alignment of field: " , stringify ! (
                     nsStyleContentData_CounterFunction ) , "::" , stringify !
                     ( mRefCnt ) ));
     }
     #[repr(C)]
     #[derive(Debug, Copy)]
     pub struct nsStyleContentData__bindgen_ty_1 {
         pub mString: root::__BindgenUnionField<*mut u16>,
@@ -34559,26 +34725,26 @@ pub mod root {
                    "Size of template specialization: " , stringify ! (
                    root::nsCharTraits ) ));
         assert_eq!(::std::mem::align_of::<root::nsCharTraits>() , 1usize ,
                    concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsCharTraits ) ));
     }
     #[test]
-    fn __bindgen_test_layout__bindgen_ty_id_211387_instantiation_99() {
+    fn __bindgen_test_layout__bindgen_ty_id_211631_instantiation_99() {
         assert_eq!(::std::mem::size_of::<u8>() , 1usize , concat ! (
                    "Size of template specialization: " , stringify ! ( u8 )
                    ));
         assert_eq!(::std::mem::align_of::<u8>() , 1usize , concat ! (
                    "Alignment of template specialization: " , stringify ! ( u8
                    ) ));
     }
     #[test]
-    fn __bindgen_test_layout__bindgen_ty_id_211423_instantiation_100() {
+    fn __bindgen_test_layout__bindgen_ty_id_211667_instantiation_100() {
         assert_eq!(::std::mem::size_of::<u8>() , 1usize , concat ! (
                    "Size of template specialization: " , stringify ! ( u8 )
                    ));
         assert_eq!(::std::mem::align_of::<u8>() , 1usize , concat ! (
                    "Alignment of template specialization: " , stringify ! ( u8
                    ) ));
     }
     #[test]
@@ -35072,612 +35238,612 @@ pub mod root {
                    "Size of template specialization: " , stringify ! (
                    root::JS::MutableHandle<root::JS::Value> ) ));
         assert_eq!(::std::mem::align_of::<root::JS::MutableHandle<root::JS::Value>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::JS::MutableHandle<root::JS::Value> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsCOMPtr_instantiation_146() {
-        assert_eq!(::std::mem::size_of::<root::nsCOMPtr<root::nsIPrincipal>>()
-                   , 8usize , concat ! (
-                   "Size of template specialization: " , stringify ! (
-                   root::nsCOMPtr<root::nsIPrincipal> ) ));
-        assert_eq!(::std::mem::align_of::<root::nsCOMPtr<root::nsIPrincipal>>()
-                   , 8usize , concat ! (
-                   "Alignment of template specialization: " , stringify ! (
-                   root::nsCOMPtr<root::nsIPrincipal> ) ));
-    }
-    #[test]
-    fn __bindgen_test_layout_nsCOMPtr_instantiation_147() {
-        assert_eq!(::std::mem::size_of::<root::nsCOMPtr<root::nsIPrincipal>>()
-                   , 8usize , concat ! (
-                   "Size of template specialization: " , stringify ! (
-                   root::nsCOMPtr<root::nsIPrincipal> ) ));
-        assert_eq!(::std::mem::align_of::<root::nsCOMPtr<root::nsIPrincipal>>()
-                   , 8usize , concat ! (
-                   "Alignment of template specialization: " , stringify ! (
-                   root::nsCOMPtr<root::nsIPrincipal> ) ));
-    }
-    #[test]
-    fn __bindgen_test_layout_nsTArray_instantiation_148() {
+    fn __bindgen_test_layout_nsTArray_instantiation_146() {
         assert_eq!(::std::mem::size_of::<root::nsTArray<root::nsCString>>() ,
                    8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsTArray<root::nsCString> ) ));
         assert_eq!(::std::mem::align_of::<root::nsTArray<root::nsCString>>() ,
                    8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsTArray<root::nsCString> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsTArray_instantiation_149() {
+    fn __bindgen_test_layout_nsTArray_instantiation_147() {
         assert_eq!(::std::mem::size_of::<root::nsTArray<root::nsCString>>() ,
                    8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsTArray<root::nsCString> ) ));
         assert_eq!(::std::mem::align_of::<root::nsTArray<root::nsCString>>() ,
                    8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsTArray<root::nsCString> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_Heap_instantiation_150() {
+    fn __bindgen_test_layout_Heap_instantiation_148() {
         assert_eq!(::std::mem::size_of::<root::JS::Heap<root::JS::Value>>() ,
                    8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::JS::Heap<root::JS::Value> ) ));
         assert_eq!(::std::mem::align_of::<root::JS::Heap<root::JS::Value>>() ,
                    8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::JS::Heap<root::JS::Value> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_Heap_instantiation_151() {
+    fn __bindgen_test_layout_Heap_instantiation_149() {
         assert_eq!(::std::mem::size_of::<root::JS::Heap<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::JS::Heap<*mut root::JSObject> ) ));
         assert_eq!(::std::mem::align_of::<root::JS::Heap<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::JS::Heap<*mut root::JSObject> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_TenuredHeap_instantiation_152() {
+    fn __bindgen_test_layout_TenuredHeap_instantiation_150() {
         assert_eq!(::std::mem::size_of::<root::JS::TenuredHeap>() , 8usize ,
                    concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::JS::TenuredHeap ) ));
         assert_eq!(::std::mem::align_of::<root::JS::TenuredHeap>() , 8usize ,
                    concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::JS::TenuredHeap ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_153() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_151() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::nsIURI>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIURI> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::nsIURI>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIURI> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsTArray_instantiation_154() {
+    fn __bindgen_test_layout_nsTArray_instantiation_152() {
         assert_eq!(::std::mem::size_of::<root::nsTArray<root::RefPtr<root::mozilla::dom::AnonymousContent>>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsTArray<root::RefPtr<root::mozilla::dom::AnonymousContent>>
                    ) ));
         assert_eq!(::std::mem::align_of::<root::nsTArray<root::RefPtr<root::mozilla::dom::AnonymousContent>>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsTArray<root::RefPtr<root::mozilla::dom::AnonymousContent>>
                    ) ));
     }
     #[test]
-    fn __bindgen_test_layout_RefPtr_instantiation_155() {
+    fn __bindgen_test_layout_RefPtr_instantiation_153() {
+        assert_eq!(::std::mem::size_of::<root::RefPtr<root::mozilla::StyleSheet>>()
+                   , 8usize , concat ! (
+                   "Size of template specialization: " , stringify ! (
+                   root::RefPtr<root::mozilla::StyleSheet> ) ));
+        assert_eq!(::std::mem::align_of::<root::RefPtr<root::mozilla::StyleSheet>>()
+                   , 8usize , concat ! (
+                   "Alignment of template specialization: " , stringify ! (
+                   root::RefPtr<root::mozilla::StyleSheet> ) ));
+    }
+    #[test]
+    fn __bindgen_test_layout_RefPtr_instantiation_154() {
         assert_eq!(::std::mem::size_of::<root::RefPtr<root::mozilla::StyleSheet>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::RefPtr<root::mozilla::StyleSheet> ) ));
         assert_eq!(::std::mem::align_of::<root::RefPtr<root::mozilla::StyleSheet>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::RefPtr<root::mozilla::StyleSheet> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_RefPtr_instantiation_156() {
-        assert_eq!(::std::mem::size_of::<root::RefPtr<root::mozilla::StyleSheet>>()
-                   , 8usize , concat ! (
-                   "Size of template specialization: " , stringify ! (
-                   root::RefPtr<root::mozilla::StyleSheet> ) ));
-        assert_eq!(::std::mem::align_of::<root::RefPtr<root::mozilla::StyleSheet>>()
-                   , 8usize , concat ! (
-                   "Alignment of template specialization: " , stringify ! (
-                   root::RefPtr<root::mozilla::StyleSheet> ) ));
-    }
-    #[test]
-    fn __bindgen_test_layout_RefPtr_instantiation_157() {
+    fn __bindgen_test_layout_RefPtr_instantiation_155() {
         assert_eq!(::std::mem::size_of::<root::RefPtr<root::mozilla::dom::Element>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::RefPtr<root::mozilla::dom::Element> ) ));
         assert_eq!(::std::mem::align_of::<root::RefPtr<root::mozilla::dom::Element>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::RefPtr<root::mozilla::dom::Element> ) ));
     }
     #[test]
+    fn __bindgen_test_layout_nsCOMPtr_instantiation_156() {
+        assert_eq!(::std::mem::size_of::<root::nsCOMPtr<root::nsIObserver>>()
+                   , 8usize , concat ! (
+                   "Size of template specialization: " , stringify ! (
+                   root::nsCOMPtr<root::nsIObserver> ) ));
+        assert_eq!(::std::mem::align_of::<root::nsCOMPtr<root::nsIObserver>>()
+                   , 8usize , concat ! (
+                   "Alignment of template specialization: " , stringify ! (
+                   root::nsCOMPtr<root::nsIObserver> ) ));
+    }
+    #[test]
+    fn __bindgen_test_layout_nsTArray_instantiation_157() {
+        assert_eq!(::std::mem::size_of::<root::nsTArray<root::nsCOMPtr<root::nsIObserver>>>()
+                   , 8usize , concat ! (
+                   "Size of template specialization: " , stringify ! (
+                   root::nsTArray<root::nsCOMPtr<root::nsIObserver>> ) ));
+        assert_eq!(::std::mem::align_of::<root::nsTArray<root::nsCOMPtr<root::nsIObserver>>>()
+                   , 8usize , concat ! (
+                   "Alignment of template specialization: " , stringify ! (
+                   root::nsTArray<root::nsCOMPtr<root::nsIObserver>> ) ));
+    }
+    #[test]
     fn __bindgen_test_layout_nsCOMPtr_instantiation_158() {
         assert_eq!(::std::mem::size_of::<root::nsCOMPtr<root::nsIObserver>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsCOMPtr<root::nsIObserver> ) ));
         assert_eq!(::std::mem::align_of::<root::nsCOMPtr<root::nsIObserver>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsCOMPtr<root::nsIObserver> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsTArray_instantiation_159() {
-        assert_eq!(::std::mem::size_of::<root::nsTArray<root::nsCOMPtr<root::nsIObserver>>>()
-                   , 8usize , concat ! (
-                   "Size of template specialization: " , stringify ! (
-                   root::nsTArray<root::nsCOMPtr<root::nsIObserver>> ) ));
-        assert_eq!(::std::mem::align_of::<root::nsTArray<root::nsCOMPtr<root::nsIObserver>>>()
-                   , 8usize , concat ! (
-                   "Alignment of template specialization: " , stringify ! (
-                   root::nsTArray<root::nsCOMPtr<root::nsIObserver>> ) ));
-    }
-    #[test]
-    fn __bindgen_test_layout_nsCOMPtr_instantiation_160() {
-        assert_eq!(::std::mem::size_of::<root::nsCOMPtr<root::nsIObserver>>()
-                   , 8usize , concat ! (
-                   "Size of template specialization: " , stringify ! (
-                   root::nsCOMPtr<root::nsIObserver> ) ));
-        assert_eq!(::std::mem::align_of::<root::nsCOMPtr<root::nsIObserver>>()
-                   , 8usize , concat ! (
-                   "Alignment of template specialization: " , stringify ! (
-                   root::nsCOMPtr<root::nsIObserver> ) ));
-    }
-    #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_161() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_159() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::nsIDocument>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIDocument> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::nsIDocument>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIDocument> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_162() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_160() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::nsIURI>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIURI> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::nsIURI>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIURI> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_RefPtr_instantiation_163() {
+    fn __bindgen_test_layout_RefPtr_instantiation_161() {
         assert_eq!(::std::mem::size_of::<root::RefPtr<root::mozilla::StyleSheet>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::RefPtr<root::mozilla::StyleSheet> ) ));
         assert_eq!(::std::mem::align_of::<root::RefPtr<root::mozilla::StyleSheet>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::RefPtr<root::mozilla::StyleSheet> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_164() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_162() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::nsIDocument>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIDocument> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::nsIDocument>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIDocument> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_MutableHandle_instantiation_165() {
+    fn __bindgen_test_layout_MutableHandle_instantiation_163() {
         assert_eq!(::std::mem::size_of::<root::JS::MutableHandle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::JS::MutableHandle<*mut root::JSObject> ) ));
         assert_eq!(::std::mem::align_of::<root::JS::MutableHandle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::JS::MutableHandle<*mut root::JSObject> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_166() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_164() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::nsContentList>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsContentList> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::nsContentList>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsContentList> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_167() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_165() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::nsContentList>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsContentList> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::nsContentList>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsContentList> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_168() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_166() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::nsINode>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsINode> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::nsINode>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsINode> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_RefPtr_instantiation_169() {
+    fn __bindgen_test_layout_RefPtr_instantiation_167() {
         assert_eq!(::std::mem::size_of::<root::RefPtr<root::mozilla::dom::Element>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::RefPtr<root::mozilla::dom::Element> ) ));
         assert_eq!(::std::mem::align_of::<root::RefPtr<root::mozilla::dom::Element>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::RefPtr<root::mozilla::dom::Element> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_Handle_instantiation_170() {
+    fn __bindgen_test_layout_Handle_instantiation_168() {
         assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::JS::Handle<*mut root::JSObject> ) ));
         assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::JS::Handle<*mut root::JSObject> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_171() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_169() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::nsIURI>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIURI> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::nsIURI>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIURI> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_172() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_170() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::nsIRunnable>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIRunnable> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::nsIRunnable>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIRunnable> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsCOMPtr_instantiation_173() {
+    fn __bindgen_test_layout_nsCOMPtr_instantiation_171() {
         assert_eq!(::std::mem::size_of::<root::nsCOMPtr<root::mozilla::dom::Link>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsCOMPtr<root::mozilla::dom::Link> ) ));
         assert_eq!(::std::mem::align_of::<root::nsCOMPtr<root::mozilla::dom::Link>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsCOMPtr<root::mozilla::dom::Link> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsCOMPtr_instantiation_174() {
+    fn __bindgen_test_layout_nsCOMPtr_instantiation_172() {
         assert_eq!(::std::mem::size_of::<root::nsCOMPtr<root::nsIWeakReference>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsCOMPtr<root::nsIWeakReference> ) ));
         assert_eq!(::std::mem::align_of::<root::nsCOMPtr<root::nsIWeakReference>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsCOMPtr<root::nsIWeakReference> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_RefPtr_instantiation_175() {
+    fn __bindgen_test_layout_RefPtr_instantiation_173() {
         assert_eq!(::std::mem::size_of::<root::RefPtr<root::mozilla::StyleSheet>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::RefPtr<root::mozilla::StyleSheet> ) ));
         assert_eq!(::std::mem::align_of::<root::RefPtr<root::mozilla::StyleSheet>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::RefPtr<root::mozilla::StyleSheet> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_Handle_instantiation_176() {
+    fn __bindgen_test_layout_Handle_instantiation_174() {
         assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::JS::Handle<*mut root::JSObject> ) ));
         assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::JS::Handle<*mut root::JSObject> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_DefaultDelete_instantiation_177() {
+    fn __bindgen_test_layout_DefaultDelete_instantiation_175() {
         assert_eq!(::std::mem::size_of::<root::mozilla::DefaultDelete>() ,
                    1usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::mozilla::DefaultDelete ) ));
         assert_eq!(::std::mem::align_of::<root::mozilla::DefaultDelete>() ,
                    1usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::mozilla::DefaultDelete ) ));
     }
     #[test]
-    fn __bindgen_test_layout_UniquePtr_instantiation_178() {
+    fn __bindgen_test_layout_UniquePtr_instantiation_176() {
         assert_eq!(::std::mem::size_of::<root::mozilla::UniquePtr<root::nsISMILAttr>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::mozilla::UniquePtr<root::nsISMILAttr> ) ));
         assert_eq!(::std::mem::align_of::<root::mozilla::UniquePtr<root::nsISMILAttr>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::mozilla::UniquePtr<root::nsISMILAttr> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_179() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_177() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::mozilla::dom::NodeInfo> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::mozilla::dom::NodeInfo> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsTArray_instantiation_180() {
+    fn __bindgen_test_layout_nsTArray_instantiation_178() {
         assert_eq!(::std::mem::size_of::<root::nsTArray<::nsstring::nsStringRepr>>() ,
                    8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsTArray<::nsstring::nsStringRepr> ) ));
         assert_eq!(::std::mem::align_of::<root::nsTArray<::nsstring::nsStringRepr>>() ,
                    8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsTArray<::nsstring::nsStringRepr> ) ));
     }
     #[test]
+    fn __bindgen_test_layout_Handle_instantiation_179() {
+        assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>()
+                   , 8usize , concat ! (
+                   "Size of template specialization: " , stringify ! (
+                   root::JS::Handle<*mut root::JSObject> ) ));
+        assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>()
+                   , 8usize , concat ! (
+                   "Alignment of template specialization: " , stringify ! (
+                   root::JS::Handle<*mut root::JSObject> ) ));
+    }
+    #[test]
+    fn __bindgen_test_layout_Handle_instantiation_180() {
+        assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>()
+                   , 8usize , concat ! (
+                   "Size of template specialization: " , stringify ! (
+                   root::JS::Handle<*mut root::JSObject> ) ));
+        assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>()
+                   , 8usize , concat ! (
+                   "Alignment of template specialization: " , stringify ! (
+                   root::JS::Handle<*mut root::JSObject> ) ));
+    }
+    #[test]
     fn __bindgen_test_layout_Handle_instantiation_181() {
         assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::JS::Handle<*mut root::JSObject> ) ));
         assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::JS::Handle<*mut root::JSObject> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_Handle_instantiation_182() {
-        assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>()
-                   , 8usize , concat ! (
-                   "Size of template specialization: " , stringify ! (
-                   root::JS::Handle<*mut root::JSObject> ) ));
-        assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>()
-                   , 8usize , concat ! (
-                   "Alignment of template specialization: " , stringify ! (
-                   root::JS::Handle<*mut root::JSObject> ) ));
-    }
-    #[test]
-    fn __bindgen_test_layout_Handle_instantiation_183() {
-        assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>()
-                   , 8usize , concat ! (
-                   "Size of template specialization: " , stringify ! (
-                   root::JS::Handle<*mut root::JSObject> ) ));
-        assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>()
-                   , 8usize , concat ! (
-                   "Alignment of template specialization: " , stringify ! (
-                   root::JS::Handle<*mut root::JSObject> ) ));
-    }
-    #[test]
-    fn __bindgen_test_layout_nsRefPtrHashKey_instantiation_184() {
+    fn __bindgen_test_layout_nsRefPtrHashKey_instantiation_182() {
         assert_eq!(::std::mem::size_of::<root::nsRefPtrHashKey<root::mozilla::dom::DOMIntersectionObserver>>()
                    , 16usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsRefPtrHashKey<root::mozilla::dom::DOMIntersectionObserver>
                    ) ));
         assert_eq!(::std::mem::align_of::<root::nsRefPtrHashKey<root::mozilla::dom::DOMIntersectionObserver>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsRefPtrHashKey<root::mozilla::dom::DOMIntersectionObserver>
                    ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsDataHashtable_instantiation_185() {
+    fn __bindgen_test_layout_nsDataHashtable_instantiation_183() {
         assert_eq!(::std::mem::size_of::<[u64; 6usize]>() , 48usize , concat !
                    (
                    "Size of template specialization: " , stringify ! (
                    [u64; 6usize] ) ));
         assert_eq!(::std::mem::align_of::<[u64; 6usize]>() , 8usize , concat !
                    (
                    "Alignment of template specialization: " , stringify ! (
                    [u64; 6usize] ) ));
     }
     #[test]
-    fn __bindgen_test_layout_Handle_instantiation_186() {
+    fn __bindgen_test_layout_Handle_instantiation_184() {
         assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::JS::Handle<*mut root::JSObject> ) ));
         assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::JS::Handle<*mut root::JSObject> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsTArray_instantiation_187() {
+    fn __bindgen_test_layout_nsTArray_instantiation_185() {
         assert_eq!(::std::mem::size_of::<root::nsTArray<*mut root::nsIContent>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsTArray<*mut root::nsIContent> ) ));
         assert_eq!(::std::mem::align_of::<root::nsTArray<*mut root::nsIContent>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsTArray<*mut root::nsIContent> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsTArray_instantiation_188() {
+    fn __bindgen_test_layout_nsTArray_instantiation_186() {
         assert_eq!(::std::mem::size_of::<root::nsTArray<*mut root::nsIContent>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsTArray<*mut root::nsIContent> ) ));
         assert_eq!(::std::mem::align_of::<root::nsTArray<*mut root::nsIContent>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsTArray<*mut root::nsIContent> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_189() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_187() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::nsIURI>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIURI> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::nsIURI>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIURI> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_190() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_188() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::nsIURI>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIURI> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::nsIURI>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIURI> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_SupportsWeakPtr_instantiation_191() {
+    fn __bindgen_test_layout_SupportsWeakPtr_instantiation_189() {
         assert_eq!(::std::mem::size_of::<u64>() , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! ( u64 )
                    ));
         assert_eq!(::std::mem::align_of::<u64>() , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    u64 ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_192() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_190() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::nsIAtom>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIAtom> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::nsIAtom>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIAtom> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsTArray_instantiation_193() {
+    fn __bindgen_test_layout_nsTArray_instantiation_191() {
         assert_eq!(::std::mem::size_of::<root::nsTArray<root::nsRect>>() ,
                    8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsTArray<root::nsRect> ) ));
         assert_eq!(::std::mem::align_of::<root::nsTArray<root::nsRect>>() ,
                    8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsTArray<root::nsRect> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_194() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_192() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::nsITimer>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsITimer> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::nsITimer>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsITimer> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_DefaultDelete_instantiation_195() {
+    fn __bindgen_test_layout_DefaultDelete_instantiation_193() {
         assert_eq!(::std::mem::size_of::<root::mozilla::DefaultDelete>() ,
                    1usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::mozilla::DefaultDelete ) ));
         assert_eq!(::std::mem::align_of::<root::mozilla::DefaultDelete>() ,
                    1usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::mozilla::DefaultDelete ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsRefPtrHashKey_instantiation_196() {
+    fn __bindgen_test_layout_nsRefPtrHashKey_instantiation_194() {
         assert_eq!(::std::mem::size_of::<root::nsRefPtrHashKey<root::nsIAtom>>()
                    , 16usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsRefPtrHashKey<root::nsIAtom> ) ));
         assert_eq!(::std::mem::align_of::<root::nsRefPtrHashKey<root::nsIAtom>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsRefPtrHashKey<root::nsIAtom> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsCOMPtr_instantiation_197() {
+    fn __bindgen_test_layout_nsCOMPtr_instantiation_195() {
         assert_eq!(::std::mem::size_of::<root::nsCOMPtr<root::nsIAtom>>() ,
                    8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsCOMPtr<root::nsIAtom> ) ));
         assert_eq!(::std::mem::align_of::<root::nsCOMPtr<root::nsIAtom>>() ,
                    8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsCOMPtr<root::nsIAtom> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsTArray_instantiation_198() {
+    fn __bindgen_test_layout_nsTArray_instantiation_196() {
         assert_eq!(::std::mem::size_of::<root::nsTArray<root::nsCOMPtr<root::nsIAtom>>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsTArray<root::nsCOMPtr<root::nsIAtom>> ) ));
         assert_eq!(::std::mem::align_of::<root::nsTArray<root::nsCOMPtr<root::nsIAtom>>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsTArray<root::nsCOMPtr<root::nsIAtom>> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_199() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_197() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::nsIAtom>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIAtom> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::nsIAtom>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIAtom> ) ));
     }
     #[test]
+    fn __bindgen_test_layout_already_AddRefed_instantiation_198() {
+        assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>()
+                   , 8usize , concat ! (
+                   "Size of template specialization: " , stringify ! (
+                   root::already_AddRefed<root::mozilla::dom::NodeInfo> ) ));
+        assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>()
+                   , 8usize , concat ! (
+                   "Alignment of template specialization: " , stringify ! (
+                   root::already_AddRefed<root::mozilla::dom::NodeInfo> ) ));
+    }
+    #[test]
+    fn __bindgen_test_layout_already_AddRefed_instantiation_199() {
+        assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>()
+                   , 8usize , concat ! (
+                   "Size of template specialization: " , stringify ! (
+                   root::already_AddRefed<root::mozilla::dom::NodeInfo> ) ));
+        assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>()
+                   , 8usize , concat ! (
+                   "Alignment of template specialization: " , stringify ! (
+                   root::already_AddRefed<root::mozilla::dom::NodeInfo> ) ));
+    }
+    #[test]
     fn __bindgen_test_layout_already_AddRefed_instantiation_200() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::mozilla::dom::NodeInfo> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
@@ -35690,845 +35856,845 @@ pub mod root {
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::mozilla::dom::NodeInfo> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::mozilla::dom::NodeInfo> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_202() {
-        assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>()
-                   , 8usize , concat ! (
-                   "Size of template specialization: " , stringify ! (
-                   root::already_AddRefed<root::mozilla::dom::NodeInfo> ) ));
-        assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>()
-                   , 8usize , concat ! (
-                   "Alignment of template specialization: " , stringify ! (
-                   root::already_AddRefed<root::mozilla::dom::NodeInfo> ) ));
-    }
-    #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_203() {
-        assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>()
-                   , 8usize , concat ! (
-                   "Size of template specialization: " , stringify ! (
-                   root::already_AddRefed<root::mozilla::dom::NodeInfo> ) ));
-        assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::mozilla::dom::NodeInfo>>()
-                   , 8usize , concat ! (
-                   "Alignment of template specialization: " , stringify ! (
-                   root::already_AddRefed<root::mozilla::dom::NodeInfo> ) ));
+    fn __bindgen_test_layout_Handle_instantiation_202() {
+        assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>()
+                   , 8usize , concat ! (
+                   "Size of template specialization: " , stringify ! (
+                   root::JS::Handle<*mut root::JSObject> ) ));
+        assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>()
+                   , 8usize , concat ! (
+                   "Alignment of template specialization: " , stringify ! (
+                   root::JS::Handle<*mut root::JSObject> ) ));
+    }
+    #[test]
+    fn __bindgen_test_layout_Handle_instantiation_203() {
+        assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>()
+                   , 8usize , concat ! (
+                   "Size of template specialization: " , stringify ! (
+                   root::JS::Handle<*mut root::JSObject> ) ));
+        assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>()
+                   , 8usize , concat ! (
+                   "Alignment of template specialization: " , stringify ! (
+                   root::JS::Handle<*mut root::JSObject> ) ));
     }
     #[test]
     fn __bindgen_test_layout_Handle_instantiation_204() {
         assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::JS::Handle<*mut root::JSObject> ) ));
         assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::JS::Handle<*mut root::JSObject> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_Handle_instantiation_205() {
-        assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>()
-                   , 8usize , concat ! (
-                   "Size of template specialization: " , stringify ! (
-                   root::JS::Handle<*mut root::JSObject> ) ));
-        assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>()
-                   , 8usize , concat ! (
-                   "Alignment of template specialization: " , stringify ! (
-                   root::JS::Handle<*mut root::JSObject> ) ));
-    }
-    #[test]
-    fn __bindgen_test_layout_Handle_instantiation_206() {
-        assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>()
-                   , 8usize , concat ! (
-                   "Size of template specialization: " , stringify ! (
-                   root::JS::Handle<*mut root::JSObject> ) ));
-        assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>()
-                   , 8usize , concat ! (
-                   "Alignment of template specialization: " , stringify ! (
-                   root::JS::Handle<*mut root::JSObject> ) ));
-    }
-    #[test]
-    fn __bindgen_test_layout_nsPIDOMWindow_instantiation_207() {
+    fn __bindgen_test_layout_nsPIDOMWindow_instantiation_205() {
         assert_eq!(::std::mem::size_of::<[u64; 29usize]>() , 232usize , concat
                    ! (
                    "Size of template specialization: " , stringify ! (
                    [u64; 29usize] ) ));
         assert_eq!(::std::mem::align_of::<[u64; 29usize]>() , 8usize , concat
                    ! (
                    "Alignment of template specialization: " , stringify ! (
                    [u64; 29usize] ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_208() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_206() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::nsIContent>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIContent> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::nsIContent>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIContent> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsRefPtrHashtable_instantiation_209() {
+    fn __bindgen_test_layout_nsRefPtrHashtable_instantiation_207() {
         assert_eq!(::std::mem::size_of::<[u64; 6usize]>() , 48usize , concat !
                    (
                    "Size of template specialization: " , stringify ! (
                    [u64; 6usize] ) ));
         assert_eq!(::std::mem::align_of::<[u64; 6usize]>() , 8usize , concat !
                    (
                    "Alignment of template specialization: " , stringify ! (
                    [u64; 6usize] ) ));
     }
     #[test]
-    fn __bindgen_test_layout_Handle_instantiation_210() {
+    fn __bindgen_test_layout_Handle_instantiation_208() {
         assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::JS::Handle<*mut root::JSObject> ) ));
         assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::JS::Handle<*mut root::JSObject> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsTArray_instantiation_211() {
+    fn __bindgen_test_layout_nsTArray_instantiation_209() {
         assert_eq!(::std::mem::size_of::<root::nsTArray<::nsstring::nsStringRepr>>() ,
                    8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsTArray<::nsstring::nsStringRepr> ) ));
         assert_eq!(::std::mem::align_of::<root::nsTArray<::nsstring::nsStringRepr>>() ,
                    8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsTArray<::nsstring::nsStringRepr> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_already_AddRefed_instantiation_212() {
+    fn __bindgen_test_layout_already_AddRefed_instantiation_210() {
         assert_eq!(::std::mem::size_of::<root::already_AddRefed<root::nsIContent>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIContent> ) ));
         assert_eq!(::std::mem::align_of::<root::already_AddRefed<root::nsIContent>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::already_AddRefed<root::nsIContent> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_RefPtr_instantiation_213() {
+    fn __bindgen_test_layout_RefPtr_instantiation_211() {
+        assert_eq!(::std::mem::size_of::<root::RefPtr<root::mozilla::StyleSheet>>()
+                   , 8usize , concat ! (
+                   "Size of template specialization: " , stringify ! (
+                   root::RefPtr<root::mozilla::StyleSheet> ) ));
+        assert_eq!(::std::mem::align_of::<root::RefPtr<root::mozilla::StyleSheet>>()
+                   , 8usize , concat ! (
+                   "Alignment of template specialization: " , stringify ! (
+                   root::RefPtr<root::mozilla::StyleSheet> ) ));
+    }
+    #[test]
+    fn __bindgen_test_layout_RefPtr_instantiation_212() {
         assert_eq!(::std::mem::size_of::<root::RefPtr<root::mozilla::StyleSheet>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::RefPtr<root::mozilla::StyleSheet> ) ));
         assert_eq!(::std::mem::align_of::<root::RefPtr<root::mozilla::StyleSheet>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::RefPtr<root::mozilla::StyleSheet> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_RefPtr_instantiation_214() {
-        assert_eq!(::std::mem::size_of::<root::RefPtr<root::mozilla::StyleSheet>>()
-                   , 8usize , concat ! (
-                   "Size of template specialization: " , stringify ! (
-                   root::RefPtr<root::mozilla::StyleSheet> ) ));
-        assert_eq!(::std::mem::align_of::<root::RefPtr<root::mozilla::StyleSheet>>()
-                   , 8usize , concat ! (
-                   "Alignment of template specialization: " , stringify ! (
-                   root::RefPtr<root::mozilla::StyleSheet> ) ));
-    }
-    #[test]
-    fn __bindgen_test_layout_WeakPtr_instantiation_215() {
+    fn __bindgen_test_layout_WeakPtr_instantiation_213() {
         assert_eq!(::std::mem::size_of::<u64>() , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! ( u64 )
                    ));
         assert_eq!(::std::mem::align_of::<u64>() , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    u64 ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsPtrHashKey_instantiation_216() {
+    fn __bindgen_test_layout_nsPtrHashKey_instantiation_214() {
         assert_eq!(::std::mem::size_of::<root::nsPtrHashKey<::std::os::raw::c_void>>()
                    , 16usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsPtrHashKey<::std::os::raw::c_void> ) ));
         assert_eq!(::std::mem::align_of::<root::nsPtrHashKey<::std::os::raw::c_void>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsPtrHashKey<::std::os::raw::c_void> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsPtrHashKey_instantiation_217() {
+    fn __bindgen_test_layout_nsPtrHashKey_instantiation_215() {
         assert_eq!(::std::mem::size_of::<root::nsPtrHashKey<root::WeakFrame>>()
                    , 16usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsPtrHashKey<root::WeakFrame> ) ));
         assert_eq!(::std::mem::align_of::<root::nsPtrHashKey<root::WeakFrame>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsPtrHashKey<root::WeakFrame> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_Handle_instantiation_218() {
+    fn __bindgen_test_layout_Handle_instantiation_216() {
         assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::JS::Handle<*mut root::JSObject> ) ));
         assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::JS::Handle<*mut root::JSObject> ) ));
     }
     #[test]
+    fn __bindgen_test_layout_OwningNonNull_instantiation_217() {
+        assert_eq!(::std::mem::size_of::<root::mozilla::OwningNonNull<root::nsINode>>()
+                   , 16usize , concat ! (
+                   "Size of template specialization: " , stringify ! (
+                   root::mozilla::OwningNonNull<root::nsINode> ) ));
+        assert_eq!(::std::mem::align_of::<root::mozilla::OwningNonNull<root::nsINode>>()
+                   , 8usize , concat ! (
+                   "Alignment of template specialization: " , stringify ! (
+                   root::mozilla::OwningNonNull<root::nsINode> ) ));
+    }
+    #[test]
+    fn __bindgen_test_layout_OwningNonNull_instantiation_218() {
+        assert_eq!(::std::mem::size_of::<root::mozilla::OwningNonNull<root::nsINode>>()
+                   , 16usize , concat ! (
+                   "Size of template specialization: " , stringify ! (
+                   root::mozilla::OwningNonNull<root::nsINode> ) ));
+        assert_eq!(::std::mem::align_of::<root::mozilla::OwningNonNull<root::nsINode>>()
+                   , 8usize , concat ! (
+                   "Alignment of template specialization: " , stringify ! (
+                   root::mozilla::OwningNonNull<root::nsINode> ) ));
+    }
+    #[test]
     fn __bindgen_test_layout_OwningNonNull_instantiation_219() {
         assert_eq!(::std::mem::size_of::<root::mozilla::OwningNonNull<root::nsINode>>()
                    , 16usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::mozilla::OwningNonNull<root::nsINode> ) ));
         assert_eq!(::std::mem::align_of::<root::mozilla::OwningNonNull<root::nsINode>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::mozilla::OwningNonNull<root::nsINode> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_OwningNonNull_instantiation_220() {
-        assert_eq!(::std::mem::size_of::<root::mozilla::OwningNonNull<root::nsINode>>()
-                   , 16usize , concat ! (
-                   "Size of template specialization: " , stringify ! (
-                   root::mozilla::OwningNonNull<root::nsINode> ) ));
-        assert_eq!(::std::mem::align_of::<root::mozilla::OwningNonNull<root::nsINode>>()
-                   , 8usize , concat ! (
-                   "Alignment of template specialization: " , stringify ! (
-                   root::mozilla::OwningNonNull<root::nsINode> ) ));
-    }
-    #[test]
-    fn __bindgen_test_layout_OwningNonNull_instantiation_221() {
-        assert_eq!(::std::mem::size_of::<root::mozilla::OwningNonNull<root::nsINode>>()
-                   , 16usize , concat ! (
-                   "Size of template specialization: " , stringify ! (
-                   root::mozilla::OwningNonNull<root::nsINode> ) ));
-        assert_eq!(::std::mem::align_of::<root::mozilla::OwningNonNull<root::nsINode>>()
-                   , 8usize , concat ! (
-                   "Alignment of template specialization: " , stringify ! (
-                   root::mozilla::OwningNonNull<root::nsINode> ) ));
-    }
-    #[test]
-    fn __bindgen_test_layout_Handle_instantiation_222() {
+    fn __bindgen_test_layout_Handle_instantiation_220() {
         assert_eq!(::std::mem::size_of::<root::JS::Handle<root::JS::Value>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::JS::Handle<root::JS::Value> ) ));
         assert_eq!(::std::mem::align_of::<root::JS::Handle<root::JS::Value>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::JS::Handle<root::JS::Value> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_Handle_instantiation_223() {
+    fn __bindgen_test_layout_Handle_instantiation_221() {
         assert_eq!(::std::mem::size_of::<root::JS::Handle<root::JS::Value>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::JS::Handle<root::JS::Value> ) ));
         assert_eq!(::std::mem::align_of::<root::JS::Handle<root::JS::Value>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::JS::Handle<root::JS::Value> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_Handle_instantiation_224() {
+    fn __bindgen_test_layout_Handle_instantiation_222() {
         assert_eq!(::std::mem::size_of::<root::JS::Handle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::JS::Handle<*mut root::JSObject> ) ));
         assert_eq!(::std::mem::align_of::<root::JS::Handle<*mut root::JSObject>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::JS::Handle<*mut root::JSObject> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_MutableHandle_instantiation_225() {
+    fn __bindgen_test_layout_MutableHandle_instantiation_223() {
         assert_eq!(::std::mem::size_of::<root::JS::MutableHandle<root::JS::Value>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::JS::MutableHandle<root::JS::Value> ) ));
         assert_eq!(::std::mem::align_of::<root::JS::MutableHandle<root::JS::Value>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::JS::MutableHandle<root::JS::Value> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsCOMPtr_instantiation_226() {
+    fn __bindgen_test_layout_nsCOMPtr_instantiation_224() {
         assert_eq!(::std::mem::size_of::<root::nsCOMPtr<root::nsIWeakReference>>()
                    , 8usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsCOMPtr<root::nsIWeakReference> ) ));
         assert_eq!(::std::mem::align_of::<root::nsCOMPtr<root::nsIWeakReference>>()
                    , 8usize , concat ! (
                    "Alignment of template specialization: " , stringify ! (
                    root::nsCOMPtr<root::nsIWeakReference> ) ));
     }
     #[test]
-    fn __bindgen_test_layout_nsPtrHashKey_instantiation_227() {
+    fn __bindgen_test_layout_nsPtrHashKey_instantiation_225() {
         assert_eq!(::std::mem::size_of::<root::nsPtrHashKey<::std::os::raw::c_void>>()
                    , 16usize , concat ! (
                    "Size of template specialization: " , stringify ! (
                    root::nsPtrHashKey<::std::os::raw::c_void> ) ));
         assert_eq!(::std::mem::align_of::<root::nsPtrHashKey<::std::os::raw::c_voi