Merge inbound to mozilla-central. a=merge
authorGurzau Raul <rgurzau@mozilla.com>
Tue, 08 May 2018 01:07:00 +0300
changeset 417152 59005ba3cd3e7b3f9e8804bea881bf4c3a755d7c
parent 417111 2d95d70298e248161b629ef1d0d57049c0b62d71 (current diff)
parent 417151 344ff948dc28e761cc92dc3f6da6a4d23d3a5b1e (diff)
child 417203 5a8766e7115cc3498daa200101006f8ce38e21b9
push id33961
push userrgurzau@mozilla.com
push dateMon, 07 May 2018 22:08:28 +0000
treeherdermozilla-central@59005ba3cd3e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone62.0a1
first release with
nightly linux32
59005ba3cd3e / 62.0a1 / 20180507222648 / files
nightly linux64
59005ba3cd3e / 62.0a1 / 20180507222648 / files
nightly mac
59005ba3cd3e / 62.0a1 / 20180507222648 / files
nightly win32
59005ba3cd3e / 62.0a1 / 20180507222648 / files
nightly win64
59005ba3cd3e / 62.0a1 / 20180507222648 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge inbound to mozilla-central. a=merge
devtools/client/framework/components/toolbox-controller.js
devtools/client/framework/components/toolbox-tab.js
devtools/client/framework/components/toolbox-tabs.js
devtools/client/framework/components/toolbox-toolbar.js
testing/web-platform/meta/content-security-policy/script-src/script-src-strict_dynamic_eval.html.ini
testing/web-platform/meta/content-security-policy/script-src/script-src-strict_dynamic_new_function.html.ini
--- a/accessible/base/DocManager.cpp
+++ b/accessible/base/DocManager.cpp
@@ -17,16 +17,17 @@
 #include "xpcAccessibleDocument.h"
 
 #ifdef A11Y_LOG
 #include "Logging.h"
 #endif
 
 #include "mozilla/EventListenerManager.h"
 #include "mozilla/dom/Event.h" // for Event
+#include "nsContentUtils.h"
 #include "nsCURILoader.h"
 #include "nsDocShellLoadTypes.h"
 #include "nsIChannel.h"
 #include "nsIDOMDocument.h"
 #include "nsIInterfaceRequestorUtils.h"
 #include "nsIWebNavigation.h"
 #include "nsServiceManagerUtils.h"
 #include "nsIWebProgress.h"
@@ -472,16 +473,26 @@ DocManager::CreateDocOrRootAccessible(ns
   // Ignore hidden documents, resource documents, static clone
   // (printing) documents and documents without a docshell.
   if (!aDocument->IsVisibleConsideringAncestors() ||
       aDocument->IsResourceDoc() || aDocument->IsStaticDocument() ||
       !aDocument->IsActive()) {
     return nullptr;
   }
 
+  nsIDocShell* docShell = aDocument->GetDocShell();
+  if (!docShell || docShell->IsInvisible()) {
+    return nullptr;
+  }
+
+  nsIWidget* widget = nsContentUtils::WidgetForDocument(aDocument);
+  if (!widget || widget->WindowType() == eWindowType_invisible) {
+    return nullptr;
+  }
+
   // Ignore documents without presshell and not having root frame.
   nsIPresShell* presShell = aDocument->GetShell();
   if (!presShell || presShell->IsDestroying())
     return nullptr;
 
   bool isRootDoc = nsCoreUtils::IsRootDocument(aDocument);
 
   DocAccessible* parentDocAcc = nullptr;
--- a/accessible/tests/mochitest/events/docload/a11y.ini
+++ b/accessible/tests/mochitest/events/docload/a11y.ini
@@ -3,9 +3,11 @@ support-files =
   docload_wnd.html
   !/accessible/tests/mochitest/*.js
 
 [test_docload_aria.html]
 [test_docload_busy.html]
 [test_docload_embedded.html]
 [test_docload_iframe.html]
 [test_docload_root.html]
+skip-if = os == 'mac' # bug 1456997
 [test_docload_shutdown.html]
+skip-if = os == 'mac' # bug 1456997
--- a/accessible/tests/mochitest/events/docload/test_docload_root.html
+++ b/accessible/tests/mochitest/events/docload/test_docload_root.html
@@ -8,35 +8,16 @@
 
   <script type="application/javascript"
           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
 
   <script type="application/javascript"
           src="../../common.js"></script>
   <script type="application/javascript"
           src="../../role.js"></script>
-
-  <script type="application/javascript">
-    // Front end stuff sometimes likes to stuff things in the hidden window(s)
-    // in which case there's accessibles for that content.
-    ChromeUtils.import("resource://gre/modules/Services.jsm");
-
-    // Force the creation of an accessible for the hidden window's document.
-    let doc = Services.appShell.hiddenDOMWindow.document;
-    gAccService.getAccessibleFor(doc);
-
-    // The private hidden window will be lazily created that's why we need to do
-    // it here *before* loading '../../events.js' or else we'll have a duplicate
-    // reorder event.
-    let privateDoc = Services.appShell.hiddenPrivateDOMWindow.document;
-
-    // Force the creation of an accessible for the private hidden window's doc.
-    gAccService.getAccessibleFor(privateDoc);
-  </script>
-
   <script type="application/javascript"
           src="../../events.js"></script>
 
   <script type="application/javascript">
     // //////////////////////////////////////////////////////////////////////////
     // Invokers
 
     let gDialog;
@@ -64,25 +45,16 @@
         const accTree = {
           role: ROLE_APP_ROOT,
           children: [
             {
               role: ROLE_CHROME_WINDOW
             },
             {
               role: ROLE_CHROME_WINDOW
-            },
-            {
-              role: ROLE_CHROME_WINDOW
-            },
-            {
-              role: ROLE_CHROME_WINDOW
-            },
-            {
-              role: ROLE_CHROME_WINDOW
             }
           ]
         };
 
         testAccessibleTree(gRootAcc, accTree);
 
         gDialogDoc = gDialog.document;
         ok(isAccessibleInCache(gDialogDoc),
@@ -109,16 +81,30 @@
 
       this.getID = () => "close dialog";
     }
 
     // //////////////////////////////////////////////////////////////////////////
     // Do tests
 
     function doTests() {
+      // Front end stuff sometimes likes to stuff things in the hidden window(s)
+      // in which case we should repress all accessibles for those.
+      ChromeUtils.import("resource://gre/modules/Services.jsm");
+
+      // Try to create an accessible for the hidden window's document.
+      let doc = Services.appShell.hiddenDOMWindow.document;
+      let hiddenDocAcc = gAccService.getAccessibleFor(doc);
+      ok(!hiddenDocAcc, "hiddenDOMWindow should not have an accessible.");
+
+      // Try to create an accessible for the private hidden window's doc.
+      let privateDoc = Services.appShell.hiddenPrivateDOMWindow.document;
+      let hiddenPrivateDoc = gAccService.getAccessibleFor(privateDoc);
+      ok(!hiddenPrivateDoc, "hiddenPrivateDOMWindow should not have an accessible.");
+
       const gQueue = new eventQueue();
       gQueue.push(new openDialogWnd("about:about"));
       gQueue.push(new closeDialogWnd());
       gQueue.invoke(); // Will call SimpleTest.finish();
     }
 
     SimpleTest.waitForExplicitFinish();
     addA11yLoadEvent(doTests);
--- a/accessible/tests/mochitest/events/docload/test_docload_shutdown.html
+++ b/accessible/tests/mochitest/events/docload/test_docload_shutdown.html
@@ -8,35 +8,16 @@
 
   <script type="application/javascript"
           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
 
   <script type="application/javascript"
           src="../../common.js"></script>
   <script type="application/javascript"
           src="../../role.js"></script>
-
-  <script type="application/javascript">
-    // Front end stuff sometimes likes to stuff things in the hidden window(s)
-    // in which case there's accessibles for that content.
-    ChromeUtils.import("resource://gre/modules/Services.jsm");
-
-    // Force the creation of an accessible for the hidden window's document.
-    let doc = Services.appShell.hiddenDOMWindow.document;
-    gAccService.getAccessibleFor(doc);
-
-    // The private hidden window will be lazily created that's why we need to do
-    // it here *before* loading '../../events.js' or else we'll have a duplicate
-    // reorder event.
-    let privateDoc = Services.appShell.hiddenPrivateDOMWindow.document;
-
-    // Force the creation of an accessible for the private hidden window's doc.
-    gAccService.getAccessibleFor(privateDoc);
-  </script>
-
   <script type="application/javascript"
           src="../../events.js"></script>
 
   <script type="application/javascript">
     // //////////////////////////////////////////////////////////////////////////
     // Invokers
 
     let gDialog;
@@ -80,25 +61,16 @@
         const accTree = {
           role: ROLE_APP_ROOT,
           children: [
             {
               role: ROLE_CHROME_WINDOW
             },
             {
               role: ROLE_CHROME_WINDOW
-            },
-            {
-              role: ROLE_CHROME_WINDOW
-            },
-            {
-              role: ROLE_CHROME_WINDOW
-            },
-            {
-              role: ROLE_CHROME_WINDOW
             }
           ]
         };
 
         testAccessibleTree(gRootAcc, accTree);
         // After timeout after event hide for iframe was handled the document
         // accessible for iframe's document should no longer be in cache.
         ok(!isAccessibleInCache(gIframeDoc),
@@ -131,16 +103,31 @@
 
       this.getID = () => "close dialog";
     }
 
     // //////////////////////////////////////////////////////////////////////////
     // Do tests
 
     function doTests() {
+      // Front end stuff sometimes likes to stuff things in the hidden window(s)
+      // in which case we should repress all accessibles for those.
+      ChromeUtils.import("resource://gre/modules/Services.jsm");
+
+      // Try to create an accessible for the hidden window's document.
+      let doc = Services.appShell.hiddenDOMWindow.document;
+      let hiddenDocAcc = gAccService.getAccessibleFor(doc);
+      ok(!hiddenDocAcc, "hiddenDOMWindow should not have an accessible.");
+
+
+      // Try to create an accessible for the private hidden window's doc.
+      let privateDoc = Services.appShell.hiddenPrivateDOMWindow.document;
+      let hiddenPrivateDoc = gAccService.getAccessibleFor(privateDoc);
+      ok(!hiddenPrivateDoc, "hiddenPrivateDOMWindow should not have an accessible.");
+
       const gQueue = new eventQueue();
       gQueue.push(new openWndShutdownDoc("../../events/docload/docload_wnd.html"));
       gQueue.push(new closeWndShutdownDoc());
       gQueue.invoke(); // Will call SimpleTest.finish();
     }
 
     SimpleTest.waitForExplicitFinish();
     addA11yLoadEvent(doTests);
--- a/browser/components/preferences/applicationManager.js
+++ b/browser/components/preferences/applicationManager.js
@@ -10,41 +10,40 @@ var gAppManagerDialog = {
   onLoad() {
     document.mozSubdialogReady = this.init();
   },
 
   async init() {
     this.handlerInfo = window.arguments[0];
     Services.scriptloader.loadSubScript("chrome://browser/content/preferences/in-content/main.js",
       window);
-    var pane = gMainPane;
 
     const appDescElem = document.getElementById("appDescription");
     if (this.handlerInfo.type == TYPE_MAYBE_FEED) {
       document.l10n.setAttributes(appDescElem, "app-manager-handle-webfeeds");
     } else if (this.handlerInfo.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo) {
       document.l10n.setAttributes(appDescElem, "app-manager-handle-file", {
-        type: pane._describeType(this.handlerInfo)
+        type: this.handlerInfo.typeDescription,
       });
     } else {
       document.l10n.setAttributes(appDescElem, "app-manager-handle-protocol", {
-        type: pane._describeType(this.handlerInfo)
+        type: this.handlerInfo.typeDescription,
       });
     }
 
     var list = document.getElementById("appList");
     var apps = this.handlerInfo.possibleApplicationHandlers.enumerate();
     while (apps.hasMoreElements()) {
       let app = apps.getNext();
-      if (!pane.isValidHandlerApp(app))
+      if (!gMainPane.isValidHandlerApp(app))
         continue;
 
       app.QueryInterface(Ci.nsIHandlerApp);
       var item = list.appendItem(app.name);
-      item.setAttribute("image", pane._getIconURLForHandlerApp(app));
+      item.setAttribute("image", gMainPane._getIconURLForHandlerApp(app));
       item.className = "listitem-iconic";
       item.app = app;
     }
 
     // Triggers onSelect which populates label
     list.selectedIndex = 0;
 
     // We want to block on those elements being localized because the
--- a/browser/components/preferences/in-content/containers.xul
+++ b/browser/components/preferences/in-content/containers.xul
@@ -19,19 +19,16 @@
       data-category="paneContainers">
   <label class="header-name" flex="1" data-l10n-id="containers-header"/>
 </hbox>
 
 <!-- Containers -->
 <groupbox id="browserContainersGroupPane" data-category="paneContainers" hidden="true"
           data-hidden-from-search="true" data-subpanel="true">
   <vbox id="browserContainersbox">
-
-    <richlistbox id="containersView" orient="vertical" persist="lastSelectedType"
-                 flex="1">
-    </richlistbox>
+    <richlistbox id="containersView"/>
   </vbox>
   <vbox>
     <hbox flex="1">
       <button id="containersAdd" oncommand="gContainersPane.onAddButtonCommand();" data-l10n-id="containers-add-button"/>
     </hbox>
   </vbox>
 </groupbox>
--- a/browser/components/preferences/in-content/main.js
+++ b/browser/components/preferences/in-content/main.js
@@ -12,16 +12,23 @@ ChromeUtils.import("resource://gre/modul
 ChromeUtils.import("resource://gre/modules/FileUtils.jsm");
 ChromeUtils.import("resource:///modules/ShellService.jsm");
 ChromeUtils.import("resource:///modules/TransientPrefs.jsm");
 ChromeUtils.import("resource://gre/modules/AppConstants.jsm");
 ChromeUtils.import("resource://gre/modules/DownloadUtils.jsm");
 ChromeUtils.defineModuleGetter(this, "CloudStorage",
   "resource://gre/modules/CloudStorage.jsm");
 
+XPCOMUtils.defineLazyServiceGetters(this, {
+  gCategoryManager: ["@mozilla.org/categorymanager;1", "nsICategoryManager"],
+  gHandlerService: ["@mozilla.org/uriloader/handler-service;1", "nsIHandlerService"],
+  gMIMEService: ["@mozilla.org/mime;1", "nsIMIMEService"],
+  gWebContentContentConverterService: ["@mozilla.org/embeddor.implemented/web-content-handler-registrar;1", "nsIWebContentConverterService"],
+});
+
 // Constants & Enumeration Values
 const TYPE_MAYBE_FEED = "application/vnd.mozilla.maybe.feed";
 const TYPE_MAYBE_VIDEO_FEED = "application/vnd.mozilla.maybe.video.feed";
 const TYPE_MAYBE_AUDIO_FEED = "application/vnd.mozilla.maybe.audio.feed";
 const TYPE_PDF = "application/pdf";
 
 const PREF_PDFJS_DISABLED = "pdfjs.disabled";
 const TOPIC_PDFJS_HANDLER_CHANGED = "pdfjs:handlerChanged";
@@ -232,36 +239,32 @@ if (AppConstants.MOZ_UPDATER) {
     ]);
   }
 }
 
 // A promise that resolves when the list of application handlers is loaded.
 // We store this in a global so tests can await it.
 var promiseLoadHandlersList;
 
+var gNodeToObjectMap = new WeakMap();
+
 var gMainPane = {
   // The set of types the app knows how to handle.  A hash of HandlerInfoWrapper
   // objects, indexed by type.
   _handledTypes: {},
 
   // The list of types we can show, sorted by the sort column/direction.
   // An array of HandlerInfoWrapper objects.  We build this list when we first
   // load the data and then rebuild it when users change a pref that affects
   // what types we can show or change the sort column/direction.
   // Note: this isn't necessarily the list of types we *will* show; if the user
   // provides a filter string, we'll only show the subset of types in this list
   // that match that string.
   _visibleTypes: [],
 
-  // A count of the number of times each visible type description appears.
-  // We use these counts to determine whether or not to annotate descriptions
-  // with their types to distinguish duplicate descriptions from each other.
-  // A hash of integer counts, indexed by string description.
-  _visibleTypeDescriptionCount: {},
-
   // browser.startup.page values
   STARTUP_PREF_BLANK: 0,
   STARTUP_PREF_HOMEPAGE: 1,
   STARTUP_PREF_RESTORE_SESSION: 3,
 
   // Convenience & Performance Shortcuts
 
   get _brandShortName() {
@@ -279,25 +282,16 @@ var gMainPane = {
     return this._list = document.getElementById("handlersView");
   },
 
   get _filter() {
     delete this._filter;
     return this._filter = document.getElementById("filter");
   },
 
-  _mimeSvc: Cc["@mozilla.org/mime;1"].
-    getService(Ci.nsIMIMEService),
-
-  _helperAppSvc: Cc["@mozilla.org/uriloader/external-helper-app-service;1"].
-    getService(Ci.nsIExternalHelperAppService),
-
-  _handlerSvc: Cc["@mozilla.org/uriloader/handler-service;1"].
-    getService(Ci.nsIHandlerService),
-
   _backoffIndex: 0,
 
   /**
    * Initialization of this.
    */
   init() {
     function setEventListener(aId, aEventType, aCallback) {
       document.getElementById(aId)
@@ -538,18 +532,16 @@ var gMainPane = {
     Services.prefs.addObserver(PREF_VIDEO_FEED_SELECTED_READER, this);
 
     Services.prefs.addObserver(PREF_AUDIO_FEED_SELECTED_APP, this);
     Services.prefs.addObserver(PREF_AUDIO_FEED_SELECTED_WEB, this);
     Services.prefs.addObserver(PREF_AUDIO_FEED_SELECTED_ACTION, this);
     Services.prefs.addObserver(PREF_AUDIO_FEED_SELECTED_READER, this);
 
     setEventListener("filter", "command", gMainPane.filter);
-    setEventListener("handlersView", "select",
-      gMainPane.onSelectionChanged);
     setEventListener("typeColumn", "click", gMainPane.sort);
     setEventListener("actionColumn", "click", gMainPane.sort);
     setEventListener("chooseFolder", "command", gMainPane.chooseFolder);
     setEventListener("saveWhere", "command", gMainPane.handleSaveToCommand);
     Preferences.get("browser.download.folderList").on("change",
       gMainPane.displayDownloadDirPref.bind(gMainPane));
     Preferences.get("browser.download.dir").on("change",
       gMainPane.displayDownloadDirPref.bind(gMainPane));
@@ -1380,17 +1372,17 @@ var gMainPane = {
     audioFeedHandlerInfo.handledOnlyByPlugin = false;
   },
 
   /**
    * Load higher level internal handlers so they can be turned on/off in the
    * applications menu.
    */
   _loadInternalHandlers() {
-    var internalHandlers = [pdfHandlerInfo];
+    var internalHandlers = [new PDFHandlerInfoWrapper()];
     for (let internalHandler of internalHandlers) {
       if (internalHandler.enabled) {
         this._handledTypes[internalHandler.type] = internalHandler;
       }
     }
   },
 
   /**
@@ -1417,30 +1409,30 @@ var gMainPane = {
     let mimeTypes = navigator.mimeTypes;
 
     for (let mimeType of mimeTypes) {
       let handlerInfoWrapper;
       if (mimeType.type in this._handledTypes) {
         handlerInfoWrapper = this._handledTypes[mimeType.type];
       } else {
         let wrappedHandlerInfo =
-          this._mimeSvc.getFromTypeAndExtension(mimeType.type, null);
+          gMIMEService.getFromTypeAndExtension(mimeType.type, null);
         handlerInfoWrapper = new HandlerInfoWrapper(mimeType.type, wrappedHandlerInfo);
         handlerInfoWrapper.handledOnlyByPlugin = true;
         this._handledTypes[mimeType.type] = handlerInfoWrapper;
       }
       handlerInfoWrapper.pluginName = mimeType.enabledPlugin.name;
     }
   },
 
   /**
    * Load the set of handlers defined by the application datastore.
    */
   _loadApplicationHandlers() {
-    var wrappedHandlerInfos = this._handlerSvc.enumerate();
+    var wrappedHandlerInfos = gHandlerService.enumerate();
     while (wrappedHandlerInfos.hasMoreElements()) {
       let wrappedHandlerInfo =
         wrappedHandlerInfos.getNext().QueryInterface(Ci.nsIHandlerInfo);
       let type = wrappedHandlerInfo.type;
 
       let handlerInfoWrapper;
       if (type in this._handledTypes)
         handlerInfoWrapper = this._handledTypes[type];
@@ -1452,19 +1444,23 @@ var gMainPane = {
       handlerInfoWrapper.handledOnlyByPlugin = false;
     }
   },
 
 
   // View Construction
 
   async _rebuildVisibleTypes() {
-    // Reset the list of visible types and the visible type description counts.
     this._visibleTypes = [];
-    this._visibleTypeDescriptionCount = {};
+
+    // Map whose keys are string descriptions and values are references to the
+    // first visible HandlerInfoWrapper that has this description. We use this
+    // to determine whether or not to annotate descriptions with their types to
+    // distinguish duplicate descriptions from each other.
+    let visibleDescriptions = new Map();
 
     // Get the preferences that help determine what types to show.
     var showPlugins = Services.prefs.getBoolPref(PREF_SHOW_PLUGINS_IN_LIST);
     var hidePluginsWithoutExtensions =
       Services.prefs.getBoolPref(PREF_HIDE_PLUGINS_WITHOUT_EXTENSIONS);
 
     for (let type in this._handledTypes) {
       // Yield before processing each handler info object to avoid monopolizing
@@ -1488,170 +1484,60 @@ var gMainPane = {
 
       // Hide types handled only by plugins if so prefed.
       if (handlerInfo.handledOnlyByPlugin && !showPlugins)
         continue;
 
       // We couldn't find any reason to exclude the type, so include it.
       this._visibleTypes.push(handlerInfo);
 
-      if (handlerInfo.description in this._visibleTypeDescriptionCount)
-        this._visibleTypeDescriptionCount[handlerInfo.description]++;
-      else
-        this._visibleTypeDescriptionCount[handlerInfo.description] = 1;
+      let otherHandlerInfo = visibleDescriptions.get(handlerInfo.description);
+      if (!otherHandlerInfo) {
+        // This is the first type with this description that we encountered
+        // while rebuilding the _visibleTypes array this time. Make sure the
+        // flag is reset so we won't add the type to the description.
+        handlerInfo.disambiguateDescription = false;
+        visibleDescriptions.set(handlerInfo.description, handlerInfo);
+      } else {
+        // There is at least another type with this description. Make sure we
+        // add the type to the description on both HandlerInfoWrapper objects.
+        handlerInfo.disambiguateDescription = true;
+        otherHandlerInfo.disambiguateDescription = true;
+      }
     }
   },
 
   _rebuildView() {
+    let lastSelectedType = this._list.selectedItem &&
+      HandlerListItem.forNode(this._list.selectedItem).handlerInfoWrapper.type;
+
     // Clear the list of entries.
     while (this._list.childNodes.length > 1)
       this._list.removeChild(this._list.lastChild);
 
     var visibleTypes = this._visibleTypes;
 
     // If the user is filtering the list, then only show matching types.
     if (this._filter.value)
       visibleTypes = visibleTypes.filter(this._matchesFilter, this);
 
     for (let visibleType of visibleTypes) {
-      let item = document.createElement("richlistitem");
-      item.setAttribute("type", visibleType.type);
-      item.setAttribute("typeDescription", this._describeType(visibleType));
-      if (visibleType.smallIcon)
-        item.setAttribute("typeIcon", visibleType.smallIcon);
-      item.setAttribute("actionDescription",
-        this._describePreferredAction(visibleType));
-
-      if (!this._setIconClassForPreferredAction(visibleType, item)) {
-        item.setAttribute("actionIcon",
-          this._getIconURLForPreferredAction(visibleType));
+      let item = new HandlerListItem(visibleType);
+      this._list.appendChild(item.node);
+
+      if (visibleType.type === lastSelectedType) {
+        this._list.selectedItem = item.node;
       }
-
-      this._list.appendChild(item);
     }
-
-    this._selectLastSelectedType();
   },
 
   _matchesFilter(aType) {
     var filterValue = this._filter.value.toLowerCase();
-    return this._describeType(aType).toLowerCase().includes(filterValue) ||
-      this._describePreferredAction(aType).toLowerCase().includes(filterValue);
-  },
-
-  /**
-   * Describe, in a human-readable fashion, the type represented by the given
-   * handler info object.  Normally this is just the description provided by
-   * the info object, but if more than one object presents the same description,
-   * then we annotate the duplicate descriptions with the type itself to help
-   * users distinguish between those types.
-   *
-   * @param aHandlerInfo {nsIHandlerInfo} the type being described
-   * @returns {string} a description of the type
-   */
-  _describeType(aHandlerInfo) {
-    if (this._visibleTypeDescriptionCount[aHandlerInfo.description] > 1)
-      return this._prefsBundle.getFormattedString("typeDescriptionWithType",
-        [aHandlerInfo.description,
-        aHandlerInfo.type]);
-
-    return aHandlerInfo.description;
-  },
-
-  /**
-   * Describe, in a human-readable fashion, the preferred action to take on
-   * the type represented by the given handler info object.
-   *
-   * XXX Should this be part of the HandlerInfoWrapper interface?  It would
-   * violate the separation of model and view, but it might make more sense
-   * nonetheless (f.e. it would make sortTypes easier).
-   *
-   * @param aHandlerInfo {nsIHandlerInfo} the type whose preferred action
-   *                                      is being described
-   * @returns {string} a description of the action
-   */
-  _describePreferredAction(aHandlerInfo) {
-    // alwaysAskBeforeHandling overrides the preferred action, so if that flag
-    // is set, then describe that behavior instead.  For most types, this is
-    // the "alwaysAsk" string, but for the feed type we show something special.
-    if (aHandlerInfo.alwaysAskBeforeHandling) {
-      if (isFeedType(aHandlerInfo.type))
-        return this._prefsBundle.getFormattedString("previewInApp",
-          [this._brandShortName]);
-      return this._prefsBundle.getString("alwaysAsk");
-    }
-
-    switch (aHandlerInfo.preferredAction) {
-      case Ci.nsIHandlerInfo.saveToDisk:
-        return this._prefsBundle.getString("saveFile");
-
-      case Ci.nsIHandlerInfo.useHelperApp:
-        var preferredApp = aHandlerInfo.preferredApplicationHandler;
-        var name;
-        if (preferredApp instanceof Ci.nsILocalHandlerApp)
-          name = getFileDisplayName(preferredApp.executable);
-        else
-          name = preferredApp.name;
-        return this._prefsBundle.getFormattedString("useApp", [name]);
-
-      case Ci.nsIHandlerInfo.handleInternally:
-        // For the feed type, handleInternally means live bookmarks.
-        if (isFeedType(aHandlerInfo.type)) {
-          return this._prefsBundle.getFormattedString("addLiveBookmarksInApp",
-            [this._brandShortName]);
-        }
-
-        if (aHandlerInfo instanceof InternalHandlerInfoWrapper) {
-          return this._prefsBundle.getFormattedString("previewInApp",
-            [this._brandShortName]);
-        }
-
-        // For other types, handleInternally looks like either useHelperApp
-        // or useSystemDefault depending on whether or not there's a preferred
-        // handler app.
-        if (this.isValidHandlerApp(aHandlerInfo.preferredApplicationHandler))
-          return aHandlerInfo.preferredApplicationHandler.name;
-
-        return aHandlerInfo.defaultDescription;
-
-      // XXX Why don't we say the app will handle the type internally?
-      // Is it because the app can't actually do that?  But if that's true,
-      // then why would a preferredAction ever get set to this value
-      // in the first place?
-
-      case Ci.nsIHandlerInfo.useSystemDefault:
-        return this._prefsBundle.getFormattedString("useDefault",
-          [aHandlerInfo.defaultDescription]);
-
-      case kActionUsePlugin:
-        return this._prefsBundle.getFormattedString("usePluginIn",
-          [aHandlerInfo.pluginName,
-          this._brandShortName]);
-      default:
-        throw new Error(`Unexpected preferredAction: ${aHandlerInfo.preferredAction}`);
-    }
-  },
-
-  _selectLastSelectedType() {
-    // If the list is disabled by the pref.downloads.disable_button.edit_actions
-    // preference being locked, then don't select the type, as that would cause
-    // it to appear selected, with a different background and an actions menu
-    // that makes it seem like you can choose an action for the type.
-    if (this._list.disabled)
-      return;
-
-    var lastSelectedType = this._list.getAttribute("lastSelectedType");
-    if (!lastSelectedType)
-      return;
-
-    var item = this._list.getElementsByAttribute("type", lastSelectedType)[0];
-    if (!item)
-      return;
-
-    this._list.selectedItem = item;
+    return aType.typeDescription.toLowerCase().includes(filterValue) ||
+           aType.actionDescription.toLowerCase().includes(filterValue);
   },
 
   /**
    * Whether or not the given handler app is valid.
    *
    * @param aHandlerApp {nsIHandlerApp} the handler app in question
    *
    * @returns {boolean} whether or not it's valid
@@ -1708,80 +1594,80 @@ var gMainPane = {
     while (menuPopup.hasChildNodes())
       menuPopup.removeChild(menuPopup.lastChild);
 
     let internalMenuItem;
     // Add the "Preview in Firefox" option for optional internal handlers.
     if (handlerInfo instanceof InternalHandlerInfoWrapper) {
       internalMenuItem = document.createElement("menuitem");
       internalMenuItem.setAttribute("action", Ci.nsIHandlerInfo.handleInternally);
-      let label = this._prefsBundle.getFormattedString("previewInApp",
+      let label = gMainPane._prefsBundle.getFormattedString("previewInApp",
         [this._brandShortName]);
       internalMenuItem.setAttribute("label", label);
       internalMenuItem.setAttribute("tooltiptext", label);
       internalMenuItem.setAttribute(APP_ICON_ATTR_NAME, "ask");
       menuPopup.appendChild(internalMenuItem);
     }
 
     {
       var askMenuItem = document.createElement("menuitem");
       askMenuItem.setAttribute("action", Ci.nsIHandlerInfo.alwaysAsk);
       let label;
       if (isFeedType(handlerInfo.type))
-        label = this._prefsBundle.getFormattedString("previewInApp",
+        label = gMainPane._prefsBundle.getFormattedString("previewInApp",
           [this._brandShortName]);
       else
-        label = this._prefsBundle.getString("alwaysAsk");
+        label = gMainPane._prefsBundle.getString("alwaysAsk");
       askMenuItem.setAttribute("label", label);
       askMenuItem.setAttribute("tooltiptext", label);
       askMenuItem.setAttribute(APP_ICON_ATTR_NAME, "ask");
       menuPopup.appendChild(askMenuItem);
     }
 
     // Create a menu item for saving to disk.
     // Note: this option isn't available to protocol types, since we don't know
     // what it means to save a URL having a certain scheme to disk, nor is it
     // available to feeds, since the feed code doesn't implement the capability.
     if ((handlerInfo.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo) &&
       !isFeedType(handlerInfo.type)) {
       var saveMenuItem = document.createElement("menuitem");
       saveMenuItem.setAttribute("action", Ci.nsIHandlerInfo.saveToDisk);
-      let label = this._prefsBundle.getString("saveFile");
+      let label = gMainPane._prefsBundle.getString("saveFile");
       saveMenuItem.setAttribute("label", label);
       saveMenuItem.setAttribute("tooltiptext", label);
       saveMenuItem.setAttribute(APP_ICON_ATTR_NAME, "save");
       menuPopup.appendChild(saveMenuItem);
     }
 
     // If this is the feed type, add a Live Bookmarks item.
     if (isFeedType(handlerInfo.type)) {
       internalMenuItem = document.createElement("menuitem");
       internalMenuItem.setAttribute("action", Ci.nsIHandlerInfo.handleInternally);
-      let label = this._prefsBundle.getFormattedString("addLiveBookmarksInApp",
+      let label = gMainPane._prefsBundle.getFormattedString("addLiveBookmarksInApp",
         [this._brandShortName]);
       internalMenuItem.setAttribute("label", label);
       internalMenuItem.setAttribute("tooltiptext", label);
       internalMenuItem.setAttribute(APP_ICON_ATTR_NAME, "feed");
       menuPopup.appendChild(internalMenuItem);
     }
 
     // Add a separator to distinguish these items from the helper app items
     // that follow them.
     let menuseparator = document.createElement("menuseparator");
     menuPopup.appendChild(menuseparator);
 
     // Create a menu item for the OS default application, if any.
     if (handlerInfo.hasDefaultHandler) {
       var defaultMenuItem = document.createElement("menuitem");
       defaultMenuItem.setAttribute("action", Ci.nsIHandlerInfo.useSystemDefault);
-      let label = this._prefsBundle.getFormattedString("useDefault",
+      let label = gMainPane._prefsBundle.getFormattedString("useDefault",
         [handlerInfo.defaultDescription]);
       defaultMenuItem.setAttribute("label", label);
       defaultMenuItem.setAttribute("tooltiptext", handlerInfo.defaultDescription);
-      defaultMenuItem.setAttribute("image", this._getIconURLForSystemDefault(handlerInfo));
+      defaultMenuItem.setAttribute("image", handlerInfo.iconURLForSystemDefault);
 
       menuPopup.appendChild(defaultMenuItem);
     }
 
     // Create menu items for possible handlers.
     let preferredApp = handlerInfo.preferredApplicationHandler;
     let possibleApps = handlerInfo.possibleApplicationHandlers.enumerate();
     var possibleAppMenuItems = [];
@@ -1792,17 +1678,17 @@ var gMainPane = {
 
       let menuItem = document.createElement("menuitem");
       menuItem.setAttribute("action", Ci.nsIHandlerInfo.useHelperApp);
       let label;
       if (possibleApp instanceof Ci.nsILocalHandlerApp)
         label = getFileDisplayName(possibleApp.executable);
       else
         label = possibleApp.name;
-      label = this._prefsBundle.getFormattedString("useApp", [label]);
+      label = gMainPane._prefsBundle.getFormattedString("useApp", [label]);
       menuItem.setAttribute("label", label);
       menuItem.setAttribute("tooltiptext", label);
       menuItem.setAttribute("image", this._getIconURLForHandlerApp(possibleApp));
 
       // Attach the handler app object to the menu item so we can use it
       // to make changes to the datastore when the user selects the item.
       menuItem.handlerApp = possibleApp;
 
@@ -1830,17 +1716,17 @@ var gMainPane = {
           if (handler.equals(app)) {
             appAlreadyInHandlers = true;
             break;
           }
         }
         if (!appAlreadyInHandlers) {
           let menuItem = document.createElement("menuitem");
           menuItem.setAttribute("action", Ci.nsIHandlerInfo.useHelperApp);
-          let label = this._prefsBundle.getFormattedString("useApp", [handler.name]);
+          let label = gMainPane._prefsBundle.getFormattedString("useApp", [handler.name]);
           menuItem.setAttribute("label", label);
           menuItem.setAttribute("tooltiptext", label);
           menuItem.setAttribute("image", this._getIconURLForHandlerApp(handler));
 
           // Attach the handler app object to the menu item so we can use it
           // to make changes to the datastore when the user selects the item.
           menuItem.handlerApp = handler;
 
@@ -1849,17 +1735,17 @@ var gMainPane = {
         }
       }
     }
 
     // Create a menu item for the plugin.
     if (handlerInfo.pluginName) {
       var pluginMenuItem = document.createElement("menuitem");
       pluginMenuItem.setAttribute("action", kActionUsePlugin);
-      let label = this._prefsBundle.getFormattedString("usePluginIn",
+      let label = gMainPane._prefsBundle.getFormattedString("usePluginIn",
         [handlerInfo.pluginName,
         this._brandShortName]);
       pluginMenuItem.setAttribute("label", label);
       pluginMenuItem.setAttribute("tooltiptext", label);
       pluginMenuItem.setAttribute(APP_ICON_ATTR_NAME, "plugin");
       menuPopup.appendChild(pluginMenuItem);
     }
 
@@ -1873,32 +1759,32 @@ var gMainPane = {
       canOpenWithOtherApp = handlerInfo.type != executableType;
     }
     if (canOpenWithOtherApp) {
       let menuItem = document.createElement("menuitem");
       menuItem.className = "choose-app-item";
       menuItem.addEventListener("command", function(e) {
         gMainPane.chooseApp(e);
       });
-      let label = this._prefsBundle.getString("useOtherApp");
+      let label = gMainPane._prefsBundle.getString("useOtherApp");
       menuItem.setAttribute("label", label);
       menuItem.setAttribute("tooltiptext", label);
       menuPopup.appendChild(menuItem);
     }
 
     // Create a menu item for managing applications.
     if (possibleAppMenuItems.length) {
       let menuItem = document.createElement("menuseparator");
       menuPopup.appendChild(menuItem);
       menuItem = document.createElement("menuitem");
       menuItem.className = "manage-app-item";
       menuItem.addEventListener("command", function(e) {
         gMainPane.manageApp(e);
       });
-      menuItem.setAttribute("label", this._prefsBundle.getString("manageApp"));
+      menuItem.setAttribute("label", gMainPane._prefsBundle.getString("manageApp"));
       menuPopup.appendChild(menuItem);
     }
 
     // Select the item corresponding to the preferred action.  If the always
     // ask flag is set, it overrides the preferred action.  Otherwise we pick
     // the item identified by the preferred action (when the preferred action
     // is to use a helper app, we have to pick the specific helper app item).
     if (handlerInfo.alwaysAskBeforeHandling)
@@ -1958,26 +1844,24 @@ var gMainPane = {
 
   /**
    * Sort the list of visible types by the current sort column/direction.
    */
   _sortVisibleTypes() {
     if (!this._sortColumn)
       return;
 
-    var t = this;
-
     function sortByType(a, b) {
-      return t._describeType(a).toLowerCase().
-        localeCompare(t._describeType(b).toLowerCase());
+      return a.typeDescription.toLowerCase().
+        localeCompare(b.typeDescription.toLowerCase());
     }
 
     function sortByAction(a, b) {
-      return t._describePreferredAction(a).toLowerCase().
-        localeCompare(t._describePreferredAction(b).toLowerCase());
+      return a.actionDescription.toLowerCase().
+        localeCompare(b.actionDescription.toLowerCase());
     }
 
     switch (this._sortColumn.getAttribute("value")) {
       case "type":
         this._visibleTypes.sort(sortByType);
         break;
       case "action":
         this._visibleTypes.sort(sortByAction);
@@ -1998,16 +1882,24 @@ var gMainPane = {
   focusFilterBox() {
     this._filter.focus();
     this._filter.select();
   },
 
 
   // Changes
 
+  // Whether or not we are currently storing the action selected by the user.
+  // We use this to suppress notification-triggered updates to the list when
+  // we make changes that may spawn such updates, specifically when we change
+  // the action for the feed type, which results in feed preference updates,
+  // which spawn "pref changed" notifications that would otherwise cause us
+  // to rebuild the view unnecessarily.
+  _storingAction: false,
+
   onSelectAction(aActionItem) {
     this._storingAction = true;
 
     try {
       this._storeAction(aActionItem);
     } finally {
       this._storingAction = false;
     }
@@ -2045,44 +1937,34 @@ var gMainPane = {
 
     handlerInfo.store();
 
     // Make sure the handler info object is flagged to indicate that there is
     // now some user configuration for the type.
     handlerInfo.handledOnlyByPlugin = false;
 
     // Update the action label and image to reflect the new preferred action.
-    typeItem.setAttribute("actionDescription",
-      this._describePreferredAction(handlerInfo));
-    if (!this._setIconClassForPreferredAction(handlerInfo, typeItem)) {
-      typeItem.setAttribute("actionIcon",
-        this._getIconURLForPreferredAction(handlerInfo));
-    }
+    HandlerListItem.forNode(typeItem).refreshAction();
   },
 
   manageApp(aEvent) {
     // Don't let the normal "on select action" handler get this event,
     // as we handle it specially ourselves.
     aEvent.stopPropagation();
 
     var typeItem = this._list.selectedItem;
     var handlerInfo = this._handledTypes[typeItem.type];
 
     let onComplete = () => {
       // Rebuild the actions menu so that we revert to the previous selection,
       // or "Always ask" if the previous default application has been removed
       this.rebuildActionsMenu();
 
       // update the richlistitem too. Will be visible when selecting another row
-      typeItem.setAttribute("actionDescription",
-        this._describePreferredAction(handlerInfo));
-      if (!this._setIconClassForPreferredAction(handlerInfo, typeItem)) {
-        typeItem.setAttribute("actionIcon",
-          this._getIconURLForPreferredAction(handlerInfo));
-      }
+      HandlerListItem.forNode(typeItem).refreshAction();
     };
 
     gSubDialog.open("chrome://browser/content/preferences/applicationManager.xul",
       "resizable=no", handlerInfo, onComplete);
 
   },
 
   chooseApp(aEvent) {
@@ -2115,23 +1997,23 @@ var gMainPane = {
     };
 
     if (AppConstants.platform == "win") {
       var params = {};
       var handlerInfo = this._handledTypes[this._list.selectedItem.type];
 
       if (isFeedType(handlerInfo.type)) {
         // MIME info will be null, create a temp object.
-        params.mimeInfo = this._mimeSvc.getFromTypeAndExtension(handlerInfo.type,
+        params.mimeInfo = gMIMEService.getFromTypeAndExtension(handlerInfo.type,
           handlerInfo.primaryExtension);
       } else {
         params.mimeInfo = handlerInfo.wrappedHandlerInfo;
       }
 
-      params.title = this._prefsBundle.getString("fpTitleChooseApp");
+      params.title = gMainPane._prefsBundle.getString("fpTitleChooseApp");
       params.description = handlerInfo.description;
       params.filename = null;
       params.handlerApp = null;
 
       let onAppSelected = () => {
         if (this.isValidHandlerApp(params.handlerApp)) {
           handlerApp = params.handlerApp;
 
@@ -2140,17 +2022,17 @@ var gMainPane = {
         }
 
         chooseAppCallback(handlerApp);
       };
 
       gSubDialog.open("chrome://global/content/appPicker.xul",
         null, params, onAppSelected);
     } else {
-      let winTitle = this._prefsBundle.getString("fpTitleChooseApp");
+      let winTitle = gMainPane._prefsBundle.getString("fpTitleChooseApp");
       let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
       let fpCallback = aResult => {
         if (aResult == Ci.nsIFilePicker.returnOK && fp.file &&
           this._isValidHandlerExecutable(fp.file)) {
           handlerApp = Cc["@mozilla.org/uriloader/local-handler-app;1"].
             createInstance(Ci.nsILocalHandlerApp);
           handlerApp.name = getFileDisplayName(fp.file);
           handlerApp.executable = fp.file;
@@ -2166,76 +2048,16 @@ var gMainPane = {
       // Prompt the user to pick an app.  If they pick one, and it's a valid
       // selection, then add it to the list of possible handlers.
       fp.init(window, winTitle, Ci.nsIFilePicker.modeOpen);
       fp.appendFilters(Ci.nsIFilePicker.filterApps);
       fp.open(fpCallback);
     }
   },
 
-  // Mark which item in the list was last selected so we can reselect it
-  // when we rebuild the list or when the user returns to the prefpane.
-  onSelectionChanged() {
-    if (this._list.selectedItem)
-      this._list.setAttribute("lastSelectedType",
-        this._list.selectedItem.getAttribute("type"));
-  },
-
-  _setIconClassForPreferredAction(aHandlerInfo, aElement) {
-    // If this returns true, the attribute that CSS sniffs for was set to something
-    // so you shouldn't manually set an icon URI.
-    // This removes the existing actionIcon attribute if any, even if returning false.
-    aElement.removeAttribute("actionIcon");
-
-    if (aHandlerInfo.alwaysAskBeforeHandling) {
-      aElement.setAttribute(APP_ICON_ATTR_NAME, "ask");
-      return true;
-    }
-
-    switch (aHandlerInfo.preferredAction) {
-      case Ci.nsIHandlerInfo.saveToDisk:
-        aElement.setAttribute(APP_ICON_ATTR_NAME, "save");
-        return true;
-
-      case Ci.nsIHandlerInfo.handleInternally:
-        if (isFeedType(aHandlerInfo.type)) {
-          aElement.setAttribute(APP_ICON_ATTR_NAME, "feed");
-          return true;
-        } else if (aHandlerInfo instanceof InternalHandlerInfoWrapper) {
-          aElement.setAttribute(APP_ICON_ATTR_NAME, "ask");
-          return true;
-        }
-        break;
-
-      case kActionUsePlugin:
-        aElement.setAttribute(APP_ICON_ATTR_NAME, "plugin");
-        return true;
-    }
-    aElement.removeAttribute(APP_ICON_ATTR_NAME);
-    return false;
-  },
-
-  _getIconURLForPreferredAction(aHandlerInfo) {
-    switch (aHandlerInfo.preferredAction) {
-      case Ci.nsIHandlerInfo.useSystemDefault:
-        return this._getIconURLForSystemDefault(aHandlerInfo);
-
-      case Ci.nsIHandlerInfo.useHelperApp:
-        let preferredApp = aHandlerInfo.preferredApplicationHandler;
-        if (this.isValidHandlerApp(preferredApp))
-          return this._getIconURLForHandlerApp(preferredApp);
-      // Explicit fall-through
-
-      // This should never happen, but if preferredAction is set to some weird
-      // value, then fall back to the generic application icon.
-      default:
-        return ICON_URL_APP;
-    }
-  },
-
   _getIconURLForHandlerApp(aHandlerApp) {
     if (aHandlerApp instanceof Ci.nsILocalHandlerApp)
       return this._getIconURLForFile(aHandlerApp.executable);
 
     if (aHandlerApp instanceof Ci.nsIWebHandlerApp)
       return this._getIconURLForWebApp(aHandlerApp.uriTemplate);
 
     if (aHandlerApp instanceof Ci.nsIWebContentHandlerInfo)
@@ -2264,39 +2086,16 @@ var gMainPane = {
     // in the template replaced by the URL of the content being handled).
 
     if (/^https?$/.test(uri.scheme) && Services.prefs.getBoolPref("browser.chrome.favicons"))
       return uri.prePath + "/favicon.ico";
 
     return "";
   },
 
-  _getIconURLForSystemDefault(aHandlerInfo) {
-    // Handler info objects for MIME types on some OSes implement a property bag
-    // interface from which we can get an icon for the default app, so if we're
-    // dealing with a MIME type on one of those OSes, then try to get the icon.
-    if ("wrappedHandlerInfo" in aHandlerInfo) {
-      let wrappedHandlerInfo = aHandlerInfo.wrappedHandlerInfo;
-
-      if (wrappedHandlerInfo instanceof Ci.nsIMIMEInfo &&
-        wrappedHandlerInfo instanceof Ci.nsIPropertyBag) {
-        try {
-          let url = wrappedHandlerInfo.getProperty("defaultApplicationIconURL");
-          if (url)
-            return url + "?size=16";
-        } catch (ex) { }
-      }
-    }
-
-    // If this isn't a MIME type object on an OS that supports retrieving
-    // the icon, or if we couldn't retrieve the icon for some other reason,
-    // then use a generic icon.
-    return ICON_URL_APP;
-  },
-
   // DOWNLOADS
 
   /*
    * Preferences:
    *
    * browser.download.useDownloadDir - bool
    *   True - Save files directly to the folder configured via the
    *   browser.download.folderList preference.
@@ -2425,18 +2224,17 @@ var gMainPane = {
    * Displays a file picker in which the user can choose the location where
    * downloads are automatically saved, updating preferences and UI in
    * response to the choice, if one is made.
    */
   chooseFolder() {
     return this.chooseFolderTask().catch(Cu.reportError);
   },
   async chooseFolderTask() {
-    let bundlePreferences = document.getElementById("bundlePreferences");
-    let title = bundlePreferences.getString("chooseDownloadFolderTitle");
+    let title = gMainPane._prefsBundle.getString("chooseDownloadFolderTitle");
     let folderListPref = Preferences.get("browser.download.folderList");
     let currentDirPref = await this._indexToFolder(folderListPref.value);
     let defDownloads = await this._indexToFolder(1);
     let fp = Cc["@mozilla.org/filepicker;1"].
       createInstance(Ci.nsIFilePicker);
 
     fp.init(window, title, Ci.nsIFilePicker.modeGetFolder);
     fp.appendFilters(Ci.nsIFilePicker.filterAll);
@@ -2473,17 +2271,16 @@ var gMainPane = {
     this.displayDownloadDirPrefTask().catch(Cu.reportError);
 
     // don't override the preference's value in UI
     return undefined;
   },
 
   async displayDownloadDirPrefTask() {
     var folderListPref = Preferences.get("browser.download.folderList");
-    var bundlePreferences = document.getElementById("bundlePreferences");
     var downloadFolder = document.getElementById("downloadFolder");
     var currentDirPref = Preferences.get("browser.download.dir");
 
     // Used in defining the correct path to the folder icon.
     var fph = Services.io.getProtocolHandler("file")
       .QueryInterface(Ci.nsIFileProtocolHandler);
     var iconUrlSpec;
 
@@ -2499,21 +2296,21 @@ var gMainPane = {
     // Display a 'pretty' label or the path in the UI.
     if (folderIndex == 2) {
       // Force the left-to-right direction when displaying a custom path.
       downloadFolder.value = currentDirPref.value ?
         `\u2066${currentDirPref.value.path}\u2069` : "";
       iconUrlSpec = fph.getURLSpecFromFile(currentDirPref.value);
     } else if (folderIndex == 1) {
       // 'Downloads'
-      downloadFolder.value = bundlePreferences.getString("downloadsFolderName");
+      downloadFolder.value = gMainPane._prefsBundle.getString("downloadsFolderName");
       iconUrlSpec = fph.getURLSpecFromFile(await this._indexToFolder(1));
     } else {
       // 'Desktop'
-      downloadFolder.value = bundlePreferences.getString("desktopFolderName");
+      downloadFolder.value = gMainPane._prefsBundle.getString("desktopFolderName");
       iconUrlSpec = fph.getURLSpecFromFile(await this._getDownloadsFolder("Desktop"));
     }
     downloadFolder.style.backgroundImage = "url(moz-icon://" + iconUrlSpec + "?size=16)";
   },
 
   /**
    * Returns the Downloads folder.  If aFolder is "Desktop", then the Downloads
    * folder returned is the desktop folder; otherwise, it is a folder whose name
@@ -2625,103 +2422,276 @@ ArrayEnumerator.prototype = {
     return this._contents[this._index++];
   }
 };
 
 function isFeedType(t) {
   return t == TYPE_MAYBE_FEED || t == TYPE_MAYBE_VIDEO_FEED || t == TYPE_MAYBE_AUDIO_FEED;
 }
 
-// HandlerInfoWrapper
+/**
+ * This is associated to <richlistitem> elements in the handlers view.
+ */
+class HandlerListItem {
+  static forNode(node) {
+    return gNodeToObjectMap.get(node);
+  }
+
+  constructor(handlerInfoWrapper) {
+    this.handlerInfoWrapper = handlerInfoWrapper;
+    this.node = document.createElement("richlistitem");
+    gNodeToObjectMap.set(this.node, this);
+
+    this.node.setAttribute("type", this.handlerInfoWrapper.type);
+    this.node.setAttribute("typeDescription",
+                           this.handlerInfoWrapper.typeDescription);
+    if (this.handlerInfoWrapper.smallIcon) {
+      this.node.setAttribute("typeIcon", this.handlerInfoWrapper.smallIcon);
+    } else {
+      this.node.removeAttribute("typeIcon");
+    }
+
+    this.refreshAction();
+  }
+
+  refreshAction() {
+    this.node.setAttribute("actionDescription",
+                           this.handlerInfoWrapper.actionDescription);
+    if (this.handlerInfoWrapper.actionIconClass) {
+      this.node.setAttribute(APP_ICON_ATTR_NAME,
+                             this.handlerInfoWrapper.actionIconClass);
+      this.node.removeAttribute("actionIcon");
+    } else {
+      this.node.removeAttribute(APP_ICON_ATTR_NAME);
+      this.node.setAttribute("actionIcon", this.handlerInfoWrapper.actionIcon);
+    }
+  }
+}
 
 /**
  * This object wraps nsIHandlerInfo with some additional functionality
  * the Applications prefpane needs to display and allow modification of
  * the list of handled types.
  *
  * We create an instance of this wrapper for each entry we might display
  * in the prefpane, and we compose the instances from various sources,
  * including plugins and the handler service.
  *
  * We don't implement all the original nsIHandlerInfo functionality,
  * just the stuff that the prefpane needs.
- *
- * In theory, all of the custom functionality in this wrapper should get
- * pushed down into nsIHandlerInfo eventually.
  */
-function HandlerInfoWrapper(aType, aHandlerInfo) {
-  this._type = aType;
-  this.wrappedHandlerInfo = aHandlerInfo;
-}
-
-HandlerInfoWrapper.prototype = {
-  // The wrapped nsIHandlerInfo object.  In general, this object is private,
-  // but there are a couple cases where callers access it directly for things
-  // we haven't (yet?) implemented, so we make it a public property.
-  wrappedHandlerInfo: null,
-
-
-  // Convenience Utils
-
-  _handlerSvc: Cc["@mozilla.org/uriloader/handler-service;1"].
-    getService(Ci.nsIHandlerService),
-
-  _categoryMgr: Cc["@mozilla.org/categorymanager;1"].
-    getService(Ci.nsICategoryManager),
-
-  element(aID) {
-    return document.getElementById(aID);
-  },
-
-
-  // nsIHandlerInfo
-
-  // The MIME type or protocol scheme.
-  _type: null,
-  get type() {
-    return this._type;
-  },
+class HandlerInfoWrapper {
+  constructor(type, handlerInfo) {
+    this.type = type;
+    this.wrappedHandlerInfo = handlerInfo;
+    this.disambiguateDescription = false;
+
+    // A plugin that can handle this type, if any.
+    //
+    // Note: just because we have one doesn't mean it *will* handle the type.
+    // That depends on whether or not the type is in the list of types for which
+    // plugin handling is disabled.
+    this.pluginName = "";
+
+    // Whether or not this type is only handled by a plugin or is also handled
+    // by some user-configured action as specified in the handler info object.
+    //
+    // Note: we can't just check if there's a handler info object for this type,
+    // because OS and user configuration is mixed up in the handler info object,
+    // so we always need to retrieve it for the OS info and can't tell whether
+    // it represents only OS-default information or user-configured information.
+    //
+    // FIXME: once handler info records are broken up into OS-provided records
+    // and user-configured records, stop using this boolean flag and simply
+    // check for the presence of a user-configured record to determine whether
+    // or not this type is only handled by a plugin.  Filed as bug 395142.
+    this.handledOnlyByPlugin = false;
+  }
 
   get description() {
     if (this.wrappedHandlerInfo.description)
       return this.wrappedHandlerInfo.description;
 
     if (this.primaryExtension) {
       var extension = this.primaryExtension.toUpperCase();
-      return this.element("bundlePreferences").getFormattedString("fileEnding",
+      return gMainPane._prefsBundle.getFormattedString("fileEnding",
         [extension]);
     }
 
     return this.type;
-  },
+  }
+
+  /**
+   * Describe, in a human-readable fashion, the type represented by the given
+   * handler info object.  Normally this is just the description, but if more
+   * than one object presents the same description, "disambiguateDescription"
+   * is set and we annotate the duplicate descriptions with the type itself
+   * to help users distinguish between those types.
+   */
+  get typeDescription() {
+    if (this.disambiguateDescription) {
+      return gMainPane._prefsBundle.getFormattedString(
+        "typeDescriptionWithType", [this.description, this.type]);
+    }
+
+    return this.description;
+  }
+
+  /**
+   * Describe, in a human-readable fashion, the preferred action to take on
+   * the type represented by the given handler info object.
+   */
+  get actionDescription() {
+    // alwaysAskBeforeHandling overrides the preferred action, so if that flag
+    // is set, then describe that behavior instead.  For most types, this is
+    // the "alwaysAsk" string, but for the feed type we show something special.
+    if (this.alwaysAskBeforeHandling) {
+      if (isFeedType(this.type))
+        return gMainPane._prefsBundle.getFormattedString("previewInApp",
+          [gMainPane._brandShortName]);
+      return gMainPane._prefsBundle.getString("alwaysAsk");
+    }
+
+    switch (this.preferredAction) {
+      case Ci.nsIHandlerInfo.saveToDisk:
+        return gMainPane._prefsBundle.getString("saveFile");
+
+      case Ci.nsIHandlerInfo.useHelperApp:
+        var preferredApp = this.preferredApplicationHandler;
+        var name;
+        if (preferredApp instanceof Ci.nsILocalHandlerApp)
+          name = getFileDisplayName(preferredApp.executable);
+        else
+          name = preferredApp.name;
+        return gMainPane._prefsBundle.getFormattedString("useApp", [name]);
+
+      case Ci.nsIHandlerInfo.handleInternally:
+        // For the feed type, handleInternally means live bookmarks.
+        if (isFeedType(this.type)) {
+          return gMainPane._prefsBundle.getFormattedString("addLiveBookmarksInApp",
+            [gMainPane._brandShortName]);
+        }
+
+        if (this instanceof InternalHandlerInfoWrapper) {
+          return gMainPane._prefsBundle.getFormattedString("previewInApp",
+            [gMainPane._brandShortName]);
+        }
+
+        // For other types, handleInternally looks like either useHelperApp
+        // or useSystemDefault depending on whether or not there's a preferred
+        // handler app.
+        if (gMainPane.isValidHandlerApp(this.preferredApplicationHandler))
+          return this.preferredApplicationHandler.name;
+
+        return this.defaultDescription;
+
+      // XXX Why don't we say the app will handle the type internally?
+      // Is it because the app can't actually do that?  But if that's true,
+      // then why would a preferredAction ever get set to this value
+      // in the first place?
+
+      case Ci.nsIHandlerInfo.useSystemDefault:
+        return gMainPane._prefsBundle.getFormattedString("useDefault",
+          [this.defaultDescription]);
+
+      case kActionUsePlugin:
+        return gMainPane._prefsBundle.getFormattedString("usePluginIn",
+          [this.pluginName,
+          gMainPane._brandShortName]);
+      default:
+        throw new Error(`Unexpected preferredAction: ${this.preferredAction}`);
+    }
+  }
+
+  get actionIconClass() {
+    if (this.alwaysAskBeforeHandling) {
+      return "ask";
+    }
+
+    switch (this.preferredAction) {
+      case Ci.nsIHandlerInfo.saveToDisk:
+        return "save";
+
+      case Ci.nsIHandlerInfo.handleInternally:
+        if (isFeedType(this.type)) {
+          return "feed";
+        } else if (this instanceof InternalHandlerInfoWrapper) {
+          return "ask";
+        }
+
+      case kActionUsePlugin:
+        return "plugin";
+    }
+
+    return "";
+  }
+
+  get actionIcon() {
+    switch (this.preferredAction) {
+      case Ci.nsIHandlerInfo.useSystemDefault:
+        return this.iconURLForSystemDefault;
+
+      case Ci.nsIHandlerInfo.useHelperApp:
+        let preferredApp = this.preferredApplicationHandler;
+        if (gMainPane.isValidHandlerApp(preferredApp)) {
+          return gMainPane._getIconURLForHandlerApp(preferredApp);
+        }
+      // Explicit fall-through
+
+      // This should never happen, but if preferredAction is set to some weird
+      // value, then fall back to the generic application icon.
+      default:
+        return ICON_URL_APP;
+    }
+  }
+
+  get iconURLForSystemDefault() {
+    // Handler info objects for MIME types on some OSes implement a property bag
+    // interface from which we can get an icon for the default app, so if we're
+    // dealing with a MIME type on one of those OSes, then try to get the icon.
+    if (this.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo &&
+        this.wrappedHandlerInfo instanceof Ci.nsIPropertyBag) {
+      try {
+        let url = this.wrappedHandlerInfo.getProperty("defaultApplicationIconURL");
+        if (url) {
+          return url + "?size=16";
+        }
+      } catch (ex) { }
+    }
+
+    // If this isn't a MIME type object on an OS that supports retrieving
+    // the icon, or if we couldn't retrieve the icon for some other reason,
+    // then use a generic icon.
+    return ICON_URL_APP;
+  }
 
   get preferredApplicationHandler() {
     return this.wrappedHandlerInfo.preferredApplicationHandler;
-  },
+  }
 
   set preferredApplicationHandler(aNewValue) {
     this.wrappedHandlerInfo.preferredApplicationHandler = aNewValue;
 
     // Make sure the preferred handler is in the set of possible handlers.
     if (aNewValue)
       this.addPossibleApplicationHandler(aNewValue);
-  },
+  }
 
   get possibleApplicationHandlers() {
     return this.wrappedHandlerInfo.possibleApplicationHandlers;
-  },
+  }
 
   addPossibleApplicationHandler(aNewHandler) {
     var possibleApps = this.possibleApplicationHandlers.enumerate();
     while (possibleApps.hasMoreElements()) {
       if (possibleApps.getNext().equals(aNewHandler))
         return;
     }
     this.possibleApplicationHandlers.appendElement(aNewHandler);
-  },
+  }
 
   removePossibleApplicationHandler(aHandler) {
     var defaultApp = this.preferredApplicationHandler;
     if (defaultApp && aHandler.equals(defaultApp)) {
       // If the app we remove was the default app, we must make sure
       // it won't be used anymore
       this.alwaysAskBeforeHandling = true;
       this.preferredApplicationHandler = null;
@@ -2730,25 +2700,25 @@ HandlerInfoWrapper.prototype = {
     var handlers = this.possibleApplicationHandlers;
     for (var i = 0; i < handlers.length; ++i) {
       var handler = handlers.queryElementAt(i, Ci.nsIHandlerApp);
       if (handler.equals(aHandler)) {
         handlers.removeElementAt(i);
         break;
       }
     }
-  },
+  }
 
   get hasDefaultHandler() {
     return this.wrappedHandlerInfo.hasDefaultHandler;
-  },
+  }
 
   get defaultDescription() {
     return this.wrappedHandlerInfo.defaultDescription;
-  },
+  }
 
   // What to do with content of this type.
   get preferredAction() {
     // If we have an enabled plugin, then the action is to use that plugin.
     if (this.pluginName && !this.isDisabledPluginType)
       return kActionUsePlugin;
 
     // If the action is to use a helper app, but we don't have a preferred
@@ -2760,17 +2730,17 @@ HandlerInfoWrapper.prototype = {
     if (this.wrappedHandlerInfo.preferredAction == Ci.nsIHandlerInfo.useHelperApp &&
       !gMainPane.isValidHandlerApp(this.preferredApplicationHandler)) {
       if (this.wrappedHandlerInfo.hasDefaultHandler)
         return Ci.nsIHandlerInfo.useSystemDefault;
       return Ci.nsIHandlerInfo.saveToDisk;
     }
 
     return this.wrappedHandlerInfo.preferredAction;
-  },
+  }
 
   set preferredAction(aNewValue) {
     // If the action is to use the plugin,
     // we must set the preferred action to "save to disk".
     // But only if it's not currently the preferred action.
     if ((aNewValue == kActionUsePlugin) &&
       (this.preferredAction != Ci.nsIHandlerInfo.saveToDisk)) {
       aNewValue = Ci.nsIHandlerInfo.saveToDisk;
@@ -2778,17 +2748,17 @@ HandlerInfoWrapper.prototype = {
 
     // We don't modify the preferred action if the new action is to use a plugin
     // because handler info objects don't understand our custom "use plugin"
     // value.  Also, leaving it untouched means that we can automatically revert
     // to the old setting if the user ever removes the plugin.
 
     if (aNewValue != kActionUsePlugin)
       this.wrappedHandlerInfo.preferredAction = aNewValue;
-  },
+  }
 
   get alwaysAskBeforeHandling() {
     // If this type is handled only by a plugin, we can't trust the value
     // in the handler info object, since it'll be a default based on the absence
     // of any user configuration, and the default in that case is to always ask,
     // even though we never ask for content handled by a plugin, so special case
     // plugin-handled types by returning false here.
     if (this.pluginName && this.handledOnlyByPlugin)
@@ -2800,223 +2770,167 @@ HandlerInfoWrapper.prototype = {
     // app, but the preferredApplicationHandler is invalid, and there isn't
     // a default handler, so the preferredAction getter returns save to disk
     // instead.
     if (!(this.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo) &&
       this.preferredAction == Ci.nsIHandlerInfo.saveToDisk)
       return true;
 
     return this.wrappedHandlerInfo.alwaysAskBeforeHandling;
-  },
+  }
 
   set alwaysAskBeforeHandling(aNewValue) {
     this.wrappedHandlerInfo.alwaysAskBeforeHandling = aNewValue;
-  },
-
-
-  // nsIMIMEInfo
+  }
 
   // The primary file extension associated with this type, if any.
   //
   // XXX Plugin objects contain an array of MimeType objects with "suffixes"
   // properties; if this object has an associated plugin, shouldn't we check
   // those properties for an extension?
   get primaryExtension() {
     try {
       if (this.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo &&
         this.wrappedHandlerInfo.primaryExtension)
         return this.wrappedHandlerInfo.primaryExtension;
     } catch (ex) { }
 
     return null;
-  },
-
-
-  // Plugin Handling
-
-  // A plugin that can handle this type, if any.
-  //
-  // Note: just because we have one doesn't mean it *will* handle the type.
-  // That depends on whether or not the type is in the list of types for which
-  // plugin handling is disabled.
-  plugin: null,
-
-  // Whether or not this type is only handled by a plugin or is also handled
-  // by some user-configured action as specified in the handler info object.
-  //
-  // Note: we can't just check if there's a handler info object for this type,
-  // because OS and user configuration is mixed up in the handler info object,
-  // so we always need to retrieve it for the OS info and can't tell whether
-  // it represents only OS-default information or user-configured information.
-  //
-  // FIXME: once handler info records are broken up into OS-provided records
-  // and user-configured records, stop using this boolean flag and simply
-  // check for the presence of a user-configured record to determine whether
-  // or not this type is only handled by a plugin.  Filed as bug 395142.
-  handledOnlyByPlugin: undefined,
+  }
 
   get isDisabledPluginType() {
     return this._getDisabledPluginTypes().includes(this.type);
-  },
+  }
 
   _getDisabledPluginTypes() {
     var types = "";
 
     if (Services.prefs.prefHasUserValue(PREF_DISABLED_PLUGIN_TYPES))
       types = Services.prefs.getCharPref(PREF_DISABLED_PLUGIN_TYPES);
 
     // Only split if the string isn't empty so we don't end up with an array
     // containing a single empty string.
     if (types != "")
       return types.split(",");
 
     return [];
-  },
+  }
 
   disablePluginType() {
     var disabledPluginTypes = this._getDisabledPluginTypes();
 
     if (!disabledPluginTypes.includes(this.type))
       disabledPluginTypes.push(this.type);
 
     Services.prefs.setCharPref(PREF_DISABLED_PLUGIN_TYPES,
       disabledPluginTypes.join(","));
 
     // Update the category manager so existing browser windows update.
-    this._categoryMgr.deleteCategoryEntry("Gecko-Content-Viewers",
+    gCategoryManager.deleteCategoryEntry("Gecko-Content-Viewers",
       this.type,
       false);
-  },
+  }
 
   enablePluginType() {
     var disabledPluginTypes = this._getDisabledPluginTypes();
 
     var type = this.type;
     disabledPluginTypes = disabledPluginTypes.filter(v => v != type);
 
     Services.prefs.setCharPref(PREF_DISABLED_PLUGIN_TYPES,
       disabledPluginTypes.join(","));
 
     // Update the category manager so existing browser windows update.
-    this._categoryMgr.
-      addCategoryEntry("Gecko-Content-Viewers",
+    gCategoryManager.addCategoryEntry(
+      "Gecko-Content-Viewers",
       this.type,
       "@mozilla.org/content/plugin/document-loader-factory;1",
       false,
       true);
-  },
-
-
-  // Storage
+  }
 
   store() {
-    this._handlerSvc.store(this.wrappedHandlerInfo);
-  },
-
-
-  // Icons
+    gHandlerService.store(this.wrappedHandlerInfo);
+  }
 
   get smallIcon() {
     return this._getIcon(16);
-  },
+  }
 
   _getIcon(aSize) {
     if (this.primaryExtension)
       return "moz-icon://goat." + this.primaryExtension + "?size=" + aSize;
 
     if (this.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo)
       return "moz-icon://goat?size=" + aSize + "&contentType=" + this.type;
 
     // FIXME: consider returning some generic icon when we can't get a URL for
     // one (for example in the case of protocol schemes).  Filed as bug 395141.
     return null;
   }
-
-};
-
-
-// Feed Handler Info
+}
 
 /**
  * This object implements nsIHandlerInfo for the feed types.  It's a separate
  * object because we currently store handling information for the feed type
  * in a set of preferences rather than the nsIHandlerService-managed datastore.
  *
  * This object inherits from HandlerInfoWrapper in order to get functionality
  * that isn't special to the feed type.
- *
- * XXX Should we inherit from HandlerInfoWrapper?  After all, we override
- * most of that wrapper's properties and methods, and we have to dance around
- * the fact that the wrapper expects to have a wrappedHandlerInfo, which we
- * don't provide.
  */
-
-function FeedHandlerInfo(aMIMEType) {
-  HandlerInfoWrapper.call(this, aMIMEType, null);
-}
-
-FeedHandlerInfo.prototype = {
-  __proto__: HandlerInfoWrapper.prototype,
-
-  // Convenience Utils
-
-  _converterSvc:
-  Cc["@mozilla.org/embeddor.implemented/web-content-handler-registrar;1"].
-    getService(Ci.nsIWebContentConverterService),
-
-  _shellSvc: AppConstants.HAVE_SHELL_SERVICE ? getShellService() : null,
-
-  // nsIHandlerInfo
+class FeedHandlerInfo extends HandlerInfoWrapper {
+  constructor(aMIMEType, properties) {
+    super(aMIMEType, null);
+    Object.assign(this, properties);
+  }
 
   get description() {
-    return this.element("bundlePreferences").getString(this._appPrefLabel);
-  },
+    return gMainPane._prefsBundle.getString(this._appPrefLabel);
+  }
 
   get preferredApplicationHandler() {
     switch (Preferences.get(this._prefSelectedReader).value) {
       case "client":
         var file = Preferences.get(this._prefSelectedApp).value;
         if (file)
           return getLocalHandlerApp(file);
 
         return null;
 
       case "web":
         var uri = Preferences.get(this._prefSelectedWeb).value;
         if (!uri)
           return null;
-        return this._converterSvc.getWebContentHandlerByURI(this.type, uri);
+        return gWebContentContentConverterService.getWebContentHandlerByURI(this.type, uri);
 
       case "bookmarks":
       default:
         // When the pref is set to bookmarks, we handle feeds internally,
         // we don't forward them to a local or web handler app, so there is
         // no preferred handler.
         return null;
     }
-  },
+  }
 
   set preferredApplicationHandler(aNewValue) {
     if (aNewValue instanceof Ci.nsILocalHandlerApp) {
       Preferences.get(this._prefSelectedApp).value = aNewValue.executable;
       Preferences.get(this._prefSelectedReader).value = "client";
     } else if (aNewValue instanceof Ci.nsIWebContentHandlerInfo) {
       Preferences.get(this._prefSelectedWeb).value = aNewValue.uri;
       Preferences.get(this._prefSelectedReader).value = "web";
       // Make the web handler be the new "auto handler" for feeds.
       // Note: we don't have to unregister the auto handler when the user picks
       // a non-web handler (local app, Live Bookmarks, etc.) because the service
       // only uses the "auto handler" when the selected reader is a web handler.
       // We also don't have to unregister it when the user turns on "always ask"
       // (i.e. preview in browser), since that also overrides the auto handler.
-      this._converterSvc.setAutoHandler(this.type, aNewValue);
+      gWebContentContentConverterService.setAutoHandler(this.type, aNewValue);
     }
-  },
-
-  _possibleApplicationHandlers: null,
+  }
 
   get possibleApplicationHandlers() {
     if (this._possibleApplicationHandlers)
       return this._possibleApplicationHandlers;
 
     // A minimal implementation of nsIMutableArray.  It only supports the two
     // methods its callers invoke, namely appendElement and nsIArray::enumerate.
     this._possibleApplicationHandlers = {
@@ -3057,72 +2971,71 @@ FeedHandlerInfo.prototype = {
     if (preferredAppFile) {
       let preferredApp = getLocalHandlerApp(preferredAppFile);
       let defaultApp = this._defaultApplicationHandler;
       if (!defaultApp || !defaultApp.equals(preferredApp))
         this._possibleApplicationHandlers.appendElement(preferredApp);
     }
 
     // Add the registered web handlers.  There can be any number of these.
-    var webHandlers = this._converterSvc.getContentHandlers(this.type);
+    var webHandlers = gWebContentContentConverterService.getContentHandlers(this.type);
     for (let webHandler of webHandlers)
       this._possibleApplicationHandlers.appendElement(webHandler);
 
     return this._possibleApplicationHandlers;
-  },
-
-  __defaultApplicationHandler: undefined,
+  }
+
   get _defaultApplicationHandler() {
     if (typeof this.__defaultApplicationHandler != "undefined")
       return this.__defaultApplicationHandler;
 
     var defaultFeedReader = null;
     if (AppConstants.HAVE_SHELL_SERVICE) {
       try {
-        defaultFeedReader = this._shellSvc.defaultFeedReader;
+        defaultFeedReader = getShellService().defaultFeedReader;
       } catch (ex) {
-        // no default reader or _shellSvc is null
+        // no default reader or getShellService() is null
       }
     }
 
     if (defaultFeedReader) {
       let handlerApp = Cc["@mozilla.org/uriloader/local-handler-app;1"].
         createInstance(Ci.nsIHandlerApp);
       handlerApp.name = getFileDisplayName(defaultFeedReader);
       handlerApp.QueryInterface(Ci.nsILocalHandlerApp);
       handlerApp.executable = defaultFeedReader;
 
       this.__defaultApplicationHandler = handlerApp;
     } else {
       this.__defaultApplicationHandler = null;
     }
 
     return this.__defaultApplicationHandler;
-  },
+  }
 
   get hasDefaultHandler() {
     if (AppConstants.HAVE_SHELL_SERVICE) {
       try {
-        if (this._shellSvc.defaultFeedReader)
+        if (getShellService().defaultFeedReader)
           return true;
       } catch (ex) {
-        // no default reader or _shellSvc is null
+        // no default reader or getShellService() is null
       }
     }
 
     return false;
-  },
+  }
 
   get defaultDescription() {
     if (this.hasDefaultHandler)
       return this._defaultApplicationHandler.name;
 
     // Should we instead return null?
     return "";
-  },
+  }
 
   // What to do with content of this type.
   get preferredAction() {
     switch (Preferences.get(this._prefSelectedAction).value) {
 
       case "bookmarks":
         return Ci.nsIHandlerInfo.handleInternally;
 
@@ -3148,17 +3061,17 @@ FeedHandlerInfo.prototype = {
 
       // If the action is "ask", then alwaysAskBeforeHandling will override
       // the action, so it doesn't matter what we say it is, it just has to be
       // something that doesn't cause the controller to hide the type.
       case "ask":
       default:
         return Ci.nsIHandlerInfo.handleInternally;
     }
-  },
+  }
 
   set preferredAction(aNewValue) {
     switch (aNewValue) {
 
       case Ci.nsIHandlerInfo.handleInternally:
         Preferences.get(this._prefSelectedReader).value = "bookmarks";
         break;
 
@@ -3168,46 +3081,32 @@ FeedHandlerInfo.prototype = {
         // to the new helper app.
         break;
 
       case Ci.nsIHandlerInfo.useSystemDefault:
         Preferences.get(this._prefSelectedAction).value = "reader";
         this.preferredApplicationHandler = this._defaultApplicationHandler;
         break;
     }
-  },
+  }
 
   get alwaysAskBeforeHandling() {
     return Preferences.get(this._prefSelectedAction).value == "ask";
-  },
+  }
 
   set alwaysAskBeforeHandling(aNewValue) {
     if (aNewValue)
       Preferences.get(this._prefSelectedAction).value = "ask";
     else
       Preferences.get(this._prefSelectedAction).value = "reader";
-  },
-
-  // Whether or not we are currently storing the action selected by the user.
-  // We use this to suppress notification-triggered updates to the list when
-  // we make changes that may spawn such updates, specifically when we change
-  // the action for the feed type, which results in feed preference updates,
-  // which spawn "pref changed" notifications that would otherwise cause us
-  // to rebuild the view unnecessarily.
-  _storingAction: false,
-
-
-  // nsIMIMEInfo
+  }
 
   get primaryExtension() {
     return "xml";
-  },
-
-
-  // Storage
+  }
 
   // Changes to the preferred action and handler take effect immediately
   // (we write them out to the preferences right as they happen),
   // so we when the controller calls store() after modifying the handlers,
   // the only thing we need to store is the removal of possible handlers
   // XXX Should we hold off on making the changes until this method gets called?
   store() {
     for (let app of this._possibleApplicationHandlers._removed) {
@@ -3216,93 +3115,91 @@ FeedHandlerInfo.prototype = {
         var preferredAppFile = pref.value;
         if (preferredAppFile) {
           let preferredApp = getLocalHandlerApp(preferredAppFile);
           if (app.equals(preferredApp))
             pref.reset();
         }
       } else {
         app.QueryInterface(Ci.nsIWebContentHandlerInfo);
-        this._converterSvc.removeContentHandler(app.contentType, app.uri);
+        gWebContentContentConverterService.removeContentHandler(app.contentType,
+                                                                app.uri);
       }
     }
     this._possibleApplicationHandlers._removed = [];
-  },
-
-
-  // Icons
+  }
 
   get smallIcon() {
     return this._smallIcon;
   }
-
-};
-
-var feedHandlerInfo = {
-  __proto__: new FeedHandlerInfo(TYPE_MAYBE_FEED),
+}
+
+var feedHandlerInfo = new FeedHandlerInfo(TYPE_MAYBE_FEED, {
   _prefSelectedApp: PREF_FEED_SELECTED_APP,
   _prefSelectedWeb: PREF_FEED_SELECTED_WEB,
   _prefSelectedAction: PREF_FEED_SELECTED_ACTION,
   _prefSelectedReader: PREF_FEED_SELECTED_READER,
   _smallIcon: "chrome://browser/skin/feeds/feedIcon16.png",
   _appPrefLabel: "webFeed"
-};
-
-var videoFeedHandlerInfo = {
-  __proto__: new FeedHandlerInfo(TYPE_MAYBE_VIDEO_FEED),
+});
+
+var videoFeedHandlerInfo = new FeedHandlerInfo(TYPE_MAYBE_VIDEO_FEED, {
   _prefSelectedApp: PREF_VIDEO_FEED_SELECTED_APP,
   _prefSelectedWeb: PREF_VIDEO_FEED_SELECTED_WEB,
   _prefSelectedAction: PREF_VIDEO_FEED_SELECTED_ACTION,
   _prefSelectedReader: PREF_VIDEO_FEED_SELECTED_READER,
   _smallIcon: "chrome://browser/skin/feeds/videoFeedIcon16.png",
   _appPrefLabel: "videoPodcastFeed"
-};
-
-var audioFeedHandlerInfo = {
-  __proto__: new FeedHandlerInfo(TYPE_MAYBE_AUDIO_FEED),
+});
+
+var audioFeedHandlerInfo = new FeedHandlerInfo(TYPE_MAYBE_AUDIO_FEED, {
   _prefSelectedApp: PREF_AUDIO_FEED_SELECTED_APP,
   _prefSelectedWeb: PREF_AUDIO_FEED_SELECTED_WEB,
   _prefSelectedAction: PREF_AUDIO_FEED_SELECTED_ACTION,
   _prefSelectedReader: PREF_AUDIO_FEED_SELECTED_READER,
   _smallIcon: "chrome://browser/skin/feeds/audioFeedIcon16.png",
   _appPrefLabel: "audioPodcastFeed"
-};
+});
 
 /**
  * InternalHandlerInfoWrapper provides a basic mechanism to create an internal
  * mime type handler that can be enabled/disabled in the applications preference
  * menu.
  */
-function InternalHandlerInfoWrapper(aMIMEType) {
-  var mimeSvc = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService);
-  var handlerInfo = mimeSvc.getFromTypeAndExtension(aMIMEType, null);
-
-  HandlerInfoWrapper.call(this, aMIMEType, handlerInfo);
-}
-
-InternalHandlerInfoWrapper.prototype = {
-  __proto__: HandlerInfoWrapper.prototype,
+class InternalHandlerInfoWrapper extends HandlerInfoWrapper {
+  constructor(mimeType) {
+    super(mimeType, gMIMEService.getFromTypeAndExtension(mimeType, null));
+  }
 
   // Override store so we so we can notify any code listening for registration
   // or unregistration of this handler.
   store() {
-    HandlerInfoWrapper.prototype.store.call(this);
+    super.store();
     Services.obs.notifyObservers(null, this._handlerChanged);
-  },
+  }
 
   get enabled() {
     throw Cr.NS_ERROR_NOT_IMPLEMENTED;
-  },
+  }
 
   get description() {
-    return this.element("bundlePreferences").getString(this._appPrefLabel);
+    return gMainPane._prefsBundle.getString(this._appPrefLabel);
+  }
+}
+
+class PDFHandlerInfoWrapper extends InternalHandlerInfoWrapper {
+  constructor() {
+    super(TYPE_PDF);
   }
-};
-
-var pdfHandlerInfo = {
-  __proto__: new InternalHandlerInfoWrapper(TYPE_PDF),
-  _handlerChanged: TOPIC_PDFJS_HANDLER_CHANGED,
-  _appPrefLabel: "portableDocumentFormat",
+
+  get _handlerChanged() {
+    return TOPIC_PDFJS_HANDLER_CHANGED;
+  }
+
+  get _appPrefLabel() {
+    return "portableDocumentFormat";
+  }
+
   get enabled() {
     return !Services.prefs.getBoolPref(PREF_PDFJS_DISABLED) &&
            Services.policies.isAllowed("PDF.js");
-  },
-};
+  }
+}
--- a/browser/components/preferences/in-content/main.xul
+++ b/browser/components/preferences/in-content/main.xul
@@ -365,19 +365,18 @@
 <groupbox id="applicationsGroup" data-category="paneGeneral" hidden="true">
   <caption><label data-l10n-id="applications-header"/></caption>
   <description data-l10n-id="applications-description"/>
   <textbox id="filter" flex="1"
            type="search"
            data-l10n-id="applications-filter"
            aria-controls="handlersView"/>
 
-  <richlistbox id="handlersView" orient="vertical" persist="lastSelectedType"
-               preference="pref.downloads.disable_button.edit_actions"
-               flex="1">
+  <richlistbox id="handlersView"
+               preference="pref.downloads.disable_button.edit_actions">
     <listheader equalsize="always">
         <treecol id="typeColumn" data-l10n-id="applications-type-column" value="type"
                  persist="sortDirection"
                  flex="1" sortDirection="ascending"/>
         <treecol id="actionColumn" data-l10n-id="applications-action-column" value="action"
                  persist="sortDirection"
                  flex="1"/>
     </listheader>
--- a/browser/themes/shared/customizableui/panelUI.inc.css
+++ b/browser/themes/shared/customizableui/panelUI.inc.css
@@ -1048,16 +1048,20 @@ menuitem.panel-subview-footer@menuStateA
   font: menu;
   font-weight: normal;
 }
 
 #BMB_bookmarksPopup .subviewbutton:not([disabled="true"]) {
   color: inherit;
 }
 
+#BMB_bookmarksPopup .subviewbutton > .menu-iconic-left {
+  margin-inline-end: 3px;
+}
+
 #BMB_bookmarksPopup .panel-arrowcontainer > .panel-arrowcontent > .popup-internal-box > .autorepeatbutton-up,
 #BMB_bookmarksPopup .panel-arrowcontainer > .panel-arrowcontent > .popup-internal-box > .autorepeatbutton-down {
   -moz-appearance: none;
   margin-top: 0;
   margin-bottom: 0;
 }
 
 /* Remove padding on xul:arrowscrollbox to avoid extra padding on footer */
--- a/devtools/client/debugger/new/test/mochitest/browser.ini
+++ b/devtools/client/debugger/new/test/mochitest/browser.ini
@@ -177,16 +177,17 @@ skip-if = (os == "win" && ccov) # Bug 14
 [browser_dbg-iframes.js]
 [browser_dbg-inline-cache.js]
 [browser_dbg-keyboard-navigation.js]
 [browser_dbg-keyboard-shortcuts.js]
 skip-if = os == "linux" # bug 1351952
 [browser_dbg-layout-changes.js]
 [browser_dbg-outline.js]
 [browser_dbg-pause-exceptions.js]
+skip-if = !debug && (os == "win" && os_version == "6.1") # Bug 1456441
 [browser_dbg-pause-ux.js]
 skip-if = os == "win"
 [browser_dbg-navigation.js]
 [browser_dbg-minified.js]
 [browser_dbg-pretty-print.js]
 [browser_dbg-pretty-print-console.js]
 [browser_dbg-pretty-print-paused.js]
 [browser_dbg-preview.js]
rename from devtools/client/framework/components/toolbox-controller.js
rename to devtools/client/framework/components/ToolboxController.js
--- a/devtools/client/framework/components/toolbox-controller.js
+++ b/devtools/client/framework/components/ToolboxController.js
@@ -1,15 +1,15 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
 const {Component, createFactory} = require("devtools/client/shared/vendor/react");
-const ToolboxToolbar = createFactory(require("devtools/client/framework/components/toolbox-toolbar"));
+const ToolboxToolbar = createFactory(require("devtools/client/framework/components/ToolboxToolbar"));
 const ELEMENT_PICKER_ID = "command-button-pick";
 
 /**
  * This component serves as a state controller for the toolbox React component. It's a
  * thin layer for translating events and state of the outside world into the React update
  * cycle. This solution was used to keep the amount of code changes to a minimimum while
  * adapting the existing codebase to start using React.
  */
rename from devtools/client/framework/components/toolbox-tab.js
rename to devtools/client/framework/components/ToolboxTab.js
rename from devtools/client/framework/components/toolbox-tabs.js
rename to devtools/client/framework/components/ToolboxTabs.js
--- a/devtools/client/framework/components/toolbox-tabs.js
+++ b/devtools/client/framework/components/ToolboxTabs.js
@@ -6,17 +6,17 @@
 const { Component, createFactory } = require("devtools/client/shared/vendor/react");
 const dom = require("devtools/client/shared/vendor/react-dom-factories");
 const PropTypes = require("devtools/client/shared/vendor/react-prop-types");
 const {findDOMNode} = require("devtools/client/shared/vendor/react-dom");
 const {button, div} = dom;
 
 const Menu = require("devtools/client/framework/menu");
 const MenuItem = require("devtools/client/framework/menu-item");
-const ToolboxTab = createFactory(require("devtools/client/framework/components/toolbox-tab"));
+const ToolboxTab = createFactory(require("devtools/client/framework/components/ToolboxTab"));
 const { ToolboxTabsOrderManager } = require("devtools/client/framework/toolbox-tabs-order-manager");
 
 // 26px is chevron devtools button width.(i.e. tools-chevronmenu)
 const CHEVRON_BUTTON_WIDTH = 26;
 
 class ToolboxTabs extends Component {
   // See toolbox-toolbar propTypes for details on the props used here.
   static get propTypes() {
rename from devtools/client/framework/components/toolbox-toolbar.js
rename to devtools/client/framework/components/ToolboxToolbar.js
--- a/devtools/client/framework/components/toolbox-toolbar.js
+++ b/devtools/client/framework/components/ToolboxToolbar.js
@@ -6,17 +6,17 @@
 const { Component, createFactory } = require("devtools/client/shared/vendor/react");
 const dom = require("devtools/client/shared/vendor/react-dom-factories");
 const PropTypes = require("devtools/client/shared/vendor/react-prop-types");
 const {div, button} = dom;
 const {openWebLink} = require("devtools/client/shared/link");
 
 const Menu = require("devtools/client/framework/menu");
 const MenuItem = require("devtools/client/framework/menu-item");
-const ToolboxTabs = createFactory(require("devtools/client/framework/components/toolbox-tabs"));
+const ToolboxTabs = createFactory(require("devtools/client/framework/components/ToolboxTabs"));
 
 /**
  * This is the overall component for the toolbox toolbar. It is designed to not know how
  * the state is being managed, and attempts to be as pure as possible. The
  * ToolboxController component controls the changing state, and passes in everything as
  * props.
  */
 class ToolboxToolbar extends Component {
--- a/devtools/client/framework/components/moz.build
+++ b/devtools/client/framework/components/moz.build
@@ -1,13 +1,13 @@
 # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 
 DevToolsModules(
-  'toolbox-controller.js',
-  'toolbox-tab.js',
-  'toolbox-tabs.js',
-  'toolbox-toolbar.js',
+  'ToolboxController.js',
+  'ToolboxTab.js',
+  'ToolboxTabs.js',
+  'ToolboxToolbar.js',
 )
--- a/devtools/client/framework/toolbox.js
+++ b/devtools/client/framework/toolbox.js
@@ -585,17 +585,17 @@ Toolbox.prototype = {
     return this.browserRequire("devtools/client/shared/vendor/react-dom");
   },
 
   get ReactRedux() {
     return this.browserRequire("devtools/client/shared/vendor/react-redux");
   },
 
   get ToolboxController() {
-    return this.browserRequire("devtools/client/framework/components/toolbox-controller");
+    return this.browserRequire("devtools/client/framework/components/ToolboxController");
   },
 
   /**
    * Unconditionally create and get the source map service.
    */
   _createSourceMapService: function() {
     if (this._sourceMapService) {
       return this._sourceMapService;
--- a/devtools/client/inspector/boxmodel/components/BoxModelMain.js
+++ b/devtools/client/inspector/boxmodel/components/BoxModelMain.js
@@ -10,19 +10,16 @@ const PropTypes = require("devtools/clie
 const { findDOMNode } = require("devtools/client/shared/vendor/react-dom");
 const { KeyCodes } = require("devtools/client/shared/keycodes");
 const { LocalizationHelper } = require("devtools/shared/l10n");
 
 const BoxModelEditable = createFactory(require("./BoxModelEditable"));
 
 const Types = require("../types");
 
-const BOXMODEL_STRINGS_URI = "devtools/client/locales/boxmodel.properties";
-const BOXMODEL_L10N = new LocalizationHelper(BOXMODEL_STRINGS_URI);
-
 const SHARED_STRINGS_URI = "devtools/client/locales/shared.properties";
 const SHARED_L10N = new LocalizationHelper(SHARED_STRINGS_URI);
 
 class BoxModelMain extends PureComponent {
   static get propTypes() {
     return {
       boxModel: PropTypes.shape(Types.boxModel).isRequired,
       boxModelContainer: PropTypes.object,
@@ -447,17 +444,17 @@ class BoxModelMain extends PureComponent
       )
       :
       dom.p(
         {
           className: "boxmodel-size",
         },
         dom.span(
           {
-            title: BOXMODEL_L10N.getStr("boxmodel.content"),
+            title: "content",
           },
           SHARED_L10N.getFormatStr("dimensions", width, height)
         )
       );
 
     return dom.div(
       {
         className: "boxmodel-main devtools-monospace",
@@ -470,19 +467,19 @@ class BoxModelMain extends PureComponent
         onMouseOver: this.onHighlightMouseOver,
         onMouseOut: this.props.onHideBoxModelHighlighter,
       },
       displayPosition ?
         dom.span(
           {
             className: "boxmodel-legend",
             "data-box": "position",
-            title: BOXMODEL_L10N.getStr("boxmodel.position"),
+            title: "position",
           },
-          BOXMODEL_L10N.getStr("boxmodel.position")
+          "position"
         )
         :
         null,
       dom.div(
         {
           className: "boxmodel-box"
         },
         dom.span(
@@ -534,17 +531,17 @@ class BoxModelMain extends PureComponent
                 title: "padding",
                 ref: div => {
                   this.paddingLayout = div;
                 },
               },
               dom.div({
                 className: "boxmodel-contents",
                 "data-box": "content",
-                title: BOXMODEL_L10N.getStr("boxmodel.content"),
+                title: "content",
                 ref: div => {
                   this.contentLayout = div;
                 },
               })
             )
           )
         )
       ),
--- a/devtools/client/locales/en-US/boxmodel.properties
+++ b/devtools/client/locales/en-US/boxmodel.properties
@@ -10,24 +10,16 @@
 # You want to make that choice consistent across the developer tools.
 # A good criteria is the language in which you'd find the best
 # documentation on web development on the web.
 
 # LOCALIZATION NOTE (boxmodel.title) This is the title of the box model panel and is
 # displayed as a label.
 boxmodel.title=Box Model
 
-# LOCALIZATION NOTE (boxmodel.position) This refers to the position in the box model and
-# might be displayed as a label or as a tooltip.
-boxmodel.position=position
-
-# LOCALIZATION NOTE (boxmodel.content) This refers to the content in the box model and
-# might be displayed as a label or as a tooltip.
-boxmodel.content=content
-
 # LOCALIZATION NOTE: (boxmodel.geometryButton.tooltip) This label is displayed as a
 # tooltip that appears when hovering over the button that allows users to edit the
 # position of an element in the page.
 boxmodel.geometryButton.tooltip=Edit position
 
 # LOCALIZATION NOTE: (boxmodel.propertiesLabel) This label is displayed as the header
 # for showing and collapsing the properties underneath the box model in the layout view
 boxmodel.propertiesLabel=Box Model Properties
--- a/devtools/docs/backend/actor-registration.md
+++ b/devtools/docs/backend/actor-registration.md
@@ -1,15 +1,15 @@
 # How to register an actor
 
 ## Tab actors vs. global actors
 
 Tab actors are the most common types of actors. That's the type of actors you will most probably be adding.
 
-Tab actors target a document, this could be a tab in Firefox or a remote document in Firefox for Android/Safari/Chrome for Android (via Valence).
+Tab actors target a document, this could be a tab in Firefox or a remote document in Firefox for Android.
 
 Global actors however are for the rest, for things not related to any particular document but instead for things global to the whole Firefox/Chrome/Safari intance the toolbox is connected to (e.g. the preference actor).
 
 ## The DebuggerServer.registerModule function
 
 To register a tab actor:
 
 ```
--- a/devtools/docs/backend/backward-compatibility.md
+++ b/devtools/docs/backend/backward-compatibility.md
@@ -11,25 +11,25 @@ In general, we should strive to maintain
 The important compatibility scenarios are:
 
 1. Nightly desktop client **MUST** maintain existing compatibility back to release channel servers.
 
 This is mainly to simplify cross-platform use cases, i.e. desktop Nightly with release Fennec.
 
 2. Servers **MAY** use traits to state a feature is not supported yet.
 
-This helps us support alternate environments like the Valence adapter, which does not implement every possible server feature.
+This helps us support alternate environments, which does not implement every possible server feature.
 
 Certainly when a new feature needs a new actor method to function, it won't work with servers that don't support it. But we should still ensure the client doesn't explode when using unrelated, existing features, at least until the above time windows have elapsed.
 
 ## Testing
 
 The harder part of this currently is that there is no automated testing to ensure the above guidelines have been met. While we hope to have this at some point, for now manual testing is needed here.
 
-The easiest way to test this is to check your work against a Firefox for Android device on release channel and Valence to ensure existing features in the area you are changing continue to function. That doesn't cover every case, but it's a great start.
+The easiest way to test this is to check your work against a Firefox for Android device on release channel to ensure existing features in the area you are changing continue to function. That doesn't cover every case, but it's a great start.
 
 ## Feature Detection
 
 Starting with Firefox 36 (thanks to [bug 1069673](https://bugzilla.mozilla.org/show_bug.cgi?id=1069673)), you can use actor feature detection to determine which actors exist and what methods they expose.
 
 1. Detecting if the server has an actor: all you need is access to the `Toolbox` instance, which all panels do, when they get instantiated. Then you can do:
 
 ```js
@@ -49,11 +49,9 @@ toolbox.target.actorHasMethod("domwalker
 The `actorHasMethod` returns a promise that resolves to a boolean.
 
 ## Removing old backward compatibility code
 
 We used to support old Firefox OS servers (back to Gecko 28), we don't anymore. Does this mean we can remove compatibility traits for it?
 
 Maybe. Keep in mind that we still want to support Firefox for Android back to release channel, so we still want to keep traits in general. That's a much smaller time window than we supported for Firefox OS, so it should allow for some simplification.
 
-A number of our traits are used by Valence as flags to tell the client "that's not implemented yet", so those are important to keep to avoid breaking this use case.
-
 The type of compatibility that could now be removed are things where the protocol semantics changed in some Gecko older than release channel and the trait is not useful for saying "I don't support feature X".
--- a/dom/base/ShadowRoot.cpp
+++ b/dom/base/ShadowRoot.cpp
@@ -18,18 +18,25 @@
 #include "mozilla/StyleSheet.h"
 #include "mozilla/StyleSheetInlines.h"
 
 using namespace mozilla;
 using namespace mozilla::dom;
 
 NS_IMPL_CYCLE_COLLECTION_CLASS(ShadowRoot)
 
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(ShadowRoot,
-                                                  DocumentFragment)
+NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(ShadowRoot, DocumentFragment)
+  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mStyleSheets)
+  for (StyleSheet* sheet : tmp->mStyleSheets) {
+    // mServoStyles keeps another reference to it if applicable.
+    if (sheet->IsApplicable()) {
+      NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mServoStyles->sheets[i]");
+      cb.NoteXPCOMChild(sheet);
+    }
+  }
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDOMStyleSheets)
   for (auto iter = tmp->mIdentifierMap.ConstIter(); !iter.Done();
        iter.Next()) {
     iter.Get()->Traverse(&cb);
   }
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ShadowRoot)
new file mode 100644
--- /dev/null
+++ b/dom/base/crashtests/1459688.html
@@ -0,0 +1,6 @@
+<!doctype html>
+<div id="host"></div>
+<script>
+  host.attachShadow({ mode: "open" }).innerHTML = `<style></style>`;
+  host.shadowRoot.styleSheets[0].foobie = host.shadowRoot;
+</script>
--- a/dom/base/crashtests/crashtests.list
+++ b/dom/base/crashtests/crashtests.list
@@ -238,8 +238,9 @@ load 1411473.html
 pref(dom.webcomponents.shadowdom.enabled,false) load 1422931.html
 pref(dom.webcomponents.shadowdom.enabled,true) load 1419799.html
 skip-if(!browserIsRemote) pref(dom.webcomponents.customelements.enabled,true) pref(dom.disable_open_during_load,false) load 1419902.html # skip on non e10s loads, Bug 1419902
 pref(dom.webcomponents.shadowdom.enabled,true) load 1422883.html
 pref(dom.webcomponents.shadowdom.enabled,true) load 1428053.html
 load 1449601.html
 load 1445670.html
 load 1458016.html
+pref(dom.webcomponents.shadowdom.enabled,true) load 1459688.html
--- a/dom/security/nsCSPUtils.cpp
+++ b/dom/security/nsCSPUtils.cpp
@@ -842,19 +842,22 @@ nsCSPKeywordSrc::allows(enum CSPKeyword 
   if (mInvalidated) {
     // only 'self' and 'unsafe-inline' are keywords that can be ignored. Please note that
     // the parser already translates 'self' into a uri (see assertion in constructor).
     MOZ_ASSERT(mKeyword == CSP_UNSAFE_INLINE,
                "should only invalidate unsafe-inline");
     return false;
   }
   // either the keyword allows the load or the policy contains 'strict-dynamic', in which
-  // case we have to make sure the script is not parser created before allowing the load.
+  // case we have to make sure the script is not parser created before allowing the load
+  // and also eval should be blocked even if 'strict-dynamic' is present. Should be
+  // allowed only if 'unsafe-eval' is present.
   return ((mKeyword == aKeyword) ||
-          ((mKeyword == CSP_STRICT_DYNAMIC) && !aParserCreated));
+          ((mKeyword == CSP_STRICT_DYNAMIC) && !aParserCreated &&
+            aKeyword != CSP_UNSAFE_EVAL));
 }
 
 bool
 nsCSPKeywordSrc::visit(nsCSPSrcVisitor* aVisitor) const
 {
   return aVisitor->visitKeywordSrc(*this);
 }
 
--- a/dom/security/test/csp/mochitest.ini
+++ b/dom/security/test/csp/mochitest.ini
@@ -244,16 +244,18 @@ prefs =
 [test_connect-src.html]
 [test_CSP.html]
 [test_allow_https_schemes.html]
 [test_bug663567.html]
 [test_bug802872.html]
 [test_bug885433.html]
 [test_bug888172.html]
 [test_evalscript.html]
+[test_evalscript_blocked_by_strict_dynamic.html]
+[test_evalscript_allowed_by_strict_dynamic.html]
 [test_frameancestors.html]
 [test_frameancestors_userpass.html]
 skip-if = toolkit == 'android' # Times out, not sure why (bug 1008445)
 [test_inlinescript.html]
 [test_inlinestyle.html]
 [test_invalid_source_expression.html]
 [test_bug836922_npolicies.html]
 [test_bug886164.html]
new file mode 100644
--- /dev/null
+++ b/dom/security/test/csp/test_evalscript_allowed_by_strict_dynamic.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="Content-Security-Policy" 
+        content="script-src 'nonce-foobar' 'strict-dynamic' 'unsafe-eval'">
+  <title>Bug 1439330  - CSP: eval is not blocked if 'strict-dynamic' is enabled
+  </title>
+  <script nonce="foobar" type="application/javascript" src="/tests/SimpleTest/SimpleTest.js">
+  </script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<script nonce="foobar">
+
+/* Description of the test:
+ * We apply the script-src 'nonce-foobar' 'strict-dynamic' 'unsafe-eval' CSP and
+ * check if the eval function is allowed correctly by the CSP.
+ */
+
+SimpleTest.waitForExplicitFinish();
+
+// start the test
+try {
+  eval("1");
+  ok(true, "eval allowed by CSP");
+}
+catch (ex) {
+  ok(false, "eval should be allowed by CSP");
+}
+
+SimpleTest.finish();
+
+</script>
+</body>
+</html>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/dom/security/test/csp/test_evalscript_blocked_by_strict_dynamic.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="Content-Security-Policy" 
+        content="script-src 'nonce-foobar' 'strict-dynamic'">
+  <title>Bug 1439330  - CSP: eval is not blocked if 'strict-dynamic' is enabled
+  </title>
+  <script nonce="foobar" type="application/javascript" src="/tests/SimpleTest/SimpleTest.js">
+  </script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<script nonce="foobar">
+
+/* Description of the test:
+ * We apply the script-src 'nonce-foobar' 'strict-dynamic' CSP and
+ * check if the eval function is blocked correctly by the CSP.
+ */
+
+SimpleTest.waitForExplicitFinish();
+
+// start the test
+try {
+  eval("1");
+  ok(false, "eval should be blocked by CSP");
+}
+catch (ex) {
+  ok(true, "eval blocked by CSP");
+}
+
+SimpleTest.finish();
+
+</script>
+</body>
+</html>
\ No newline at end of file
--- a/dom/webauthn/WebAuthnManager.cpp
+++ b/dom/webauthn/WebAuthnManager.cpp
@@ -755,17 +755,20 @@ WebAuthnManager::FinishMakeCredential(co
   CryptoBuffer attDataBuf;
   rv = AssembleAttestationData(aaguidBuf, keyHandleBuf, pubKeyObj, attDataBuf);
   if (NS_FAILED(rv)) {
     RejectTransaction(rv);
     return;
   }
 
   mozilla::dom::CryptoBuffer authDataBuf;
-  rv = AssembleAuthenticatorData(rpIdHashBuf, FLAG_TUP, counterBuf, attDataBuf,
+  // attDataBuf always contains data, so per [1] we have to set the AT flag.
+  // [1] https://w3c.github.io/webauthn/#sec-authenticator-data
+  const uint8_t flags = FLAG_TUP | FLAG_AT;
+  rv = AssembleAuthenticatorData(rpIdHashBuf, flags, counterBuf, attDataBuf,
                                  authDataBuf);
   if (NS_FAILED(rv)) {
     RejectTransaction(rv);
     return;
   }
 
   // Direct attestation might have been requested by the RP. This will
   // be true only if the user consented via the permission UI.
@@ -836,19 +839,23 @@ WebAuthnManager::FinishGetAssertion(cons
   uint8_t flags = 0;
   nsresult rv = U2FDecomposeSignResponse(tokenSignatureData, flags, counterBuf,
                                          signatureBuf);
   if (NS_WARN_IF(NS_FAILED(rv))) {
     RejectTransaction(rv);
     return;
   }
 
+  // Preserve the two LSBs of the flags byte, UP and RFU1.
+  // See <https://github.com/fido-alliance/fido-2-specs/pull/519>
+  flags &= 0b11;
+
   CryptoBuffer attestationDataBuf;
   CryptoBuffer authenticatorDataBuf;
-  rv = AssembleAuthenticatorData(rpIdHashBuf, FLAG_TUP, counterBuf,
+  rv = AssembleAuthenticatorData(rpIdHashBuf, flags, counterBuf,
                                  /* deliberately empty */ attestationDataBuf,
                                  authenticatorDataBuf);
   if (NS_WARN_IF(NS_FAILED(rv))) {
     RejectTransaction(rv);
     return;
   }
 
   CryptoBuffer credentialBuf;
--- a/dom/webauthn/WebAuthnUtil.cpp
+++ b/dom/webauthn/WebAuthnUtil.cpp
@@ -150,23 +150,18 @@ AssembleAuthenticatorData(const CryptoBu
   if (NS_WARN_IF(!authDataBuf.SetCapacity(32 + 1 + 4 + attestationDataBuf.Length(),
                                           mozilla::fallible))) {
     return NS_ERROR_OUT_OF_MEMORY;
   }
   if (rpIdHashBuf.Length() != 32 || counterBuf.Length() != 4) {
     return NS_ERROR_INVALID_ARG;
   }
 
-  uint8_t flagSet = flags;
-  if (!attestationDataBuf.IsEmpty()) {
-    flagSet |= FLAG_AT;
-  }
-
   authDataBuf.AppendElements(rpIdHashBuf, mozilla::fallible);
-  authDataBuf.AppendElement(flagSet, mozilla::fallible);
+  authDataBuf.AppendElement(flags, mozilla::fallible);
   authDataBuf.AppendElements(counterBuf, mozilla::fallible);
   authDataBuf.AppendElements(attestationDataBuf, mozilla::fallible);
   return NS_OK;
 }
 
 // attestation data struct format:
 // - 16 bytes: AAGUID
 // - 2 bytes: Length of Credential ID
--- a/dom/xul/nsXULPrototypeDocument.cpp
+++ b/dom/xul/nsXULPrototypeDocument.cpp
@@ -433,34 +433,16 @@ nsXULPrototypeDocument::AddStyleSheetRef
 }
 
 const nsCOMArray<nsIURI>&
 nsXULPrototypeDocument::GetStyleSheetReferences() const
 {
     return mStyleSheetReferences;
 }
 
-NS_IMETHODIMP
-nsXULPrototypeDocument::GetHeaderData(nsAtom* aField, nsAString& aData) const
-{
-    // XXX Not implemented
-    aData.Truncate();
-    return NS_OK;
-}
-
-
-NS_IMETHODIMP
-nsXULPrototypeDocument::SetHeaderData(nsAtom* aField, const nsAString& aData)
-{
-    // XXX Not implemented
-    return NS_OK;
-}
-
-
-
 nsIPrincipal*
 nsXULPrototypeDocument::DocumentPrincipal()
 {
     NS_PRECONDITION(mNodeInfoManager, "missing nodeInfoManager");
     return mNodeInfoManager->DocumentPrincipal();
 }
 
 void
--- a/dom/xul/nsXULPrototypeDocument.h
+++ b/dom/xul/nsXULPrototypeDocument.h
@@ -77,23 +77,16 @@ public:
      * Style overlays are stylesheets that need to be applied to the
      * document, but are not referenced from within the document. They
      * are currently obtained from the chrome registry via
      * nsIXULOverlayProvider::getStyleOverlays.)
      */
     void AddStyleSheetReference(nsIURI* aStyleSheet);
     const nsCOMArray<nsIURI>& GetStyleSheetReferences() const;
 
-    /**
-     * Access HTTP header data.
-     * @note Not implemented.
-     */
-    NS_IMETHOD GetHeaderData(nsAtom* aField, nsAString& aData) const;
-    NS_IMETHOD SetHeaderData(nsAtom* aField, const nsAString& aData);
-
     nsIPrincipal *DocumentPrincipal();
     void SetDocumentPrincipal(nsIPrincipal *aPrincipal);
 
     /**
      * If current prototype document has not yet finished loading,
      * appends aDocument to the list of documents to notify (via
      * XULDocument::OnPrototypeLoadDone()) and sets aLoaded to false.
      * Otherwise sets aLoaded to true.
--- a/gfx/layers/apz/src/APZCTreeManager.cpp
+++ b/gfx/layers/apz/src/APZCTreeManager.cpp
@@ -1145,17 +1145,18 @@ APZCTreeManager::ReceiveInputEvent(Input
   {
     RecursiveMutexAutoLock lock(mTreeLock);
     RefPtr<AsyncPanZoomController> apzc = FindRootContentOrRootApzc();
     if (apzc) {
       scrollOffset = ViewAs<ScreenPixel>(apzc->GetCurrentAsyncScrollOffset(AsyncPanZoomController::eForHitTesting),
                                          PixelCastJustification::ScreenIsParentLayerForRoot);
     }
   }
-  nsEventStatus isConsumed = mToolbarAnimator->ReceiveInputEvent(aEvent, scrollOffset);
+  RefPtr<APZCTreeManager> self = this;
+  nsEventStatus isConsumed = mToolbarAnimator->ReceiveInputEvent(self, aEvent, scrollOffset);
   // Check if the mToolbarAnimator consumed the event.
   if (isConsumed == nsEventStatus_eConsumeNoDefault) {
     APZCTM_LOG("Dynamic toolbar consumed event");
     return isConsumed;
   }
 #endif // (MOZ_WIDGET_ANDROID)
 
   // Initialize aOutInputBlockId to a sane value, and then later we overwrite
--- a/gfx/layers/apz/src/AndroidDynamicToolbarAnimator.cpp
+++ b/gfx/layers/apz/src/AndroidDynamicToolbarAnimator.cpp
@@ -111,17 +111,17 @@ GetTouchY(MultiTouchInput& multiTouch, S
     *value = multiTouch.mTouches[0].mScreenPoint.y;
     return true;
   }
 
   return false;
 }
 
 nsEventStatus
-AndroidDynamicToolbarAnimator::ReceiveInputEvent(InputData& aEvent, const ScreenPoint& aScrollOffset)
+AndroidDynamicToolbarAnimator::ReceiveInputEvent(const RefPtr<APZCTreeManager>& aApz, InputData& aEvent, const ScreenPoint& aScrollOffset)
 {
   MOZ_ASSERT(APZThreadUtils::IsControllerThread());
 
   mControllerRootScrollY = aScrollOffset.y;
 
   // Only process and adjust touch events. Wheel events (aka scroll events) are adjusted in the NativePanZoomController
   if (aEvent.mInputType != MULTITOUCH_INPUT) {
     return nsEventStatus_eIgnore;
@@ -194,17 +194,17 @@ AndroidDynamicToolbarAnimator::ReceiveIn
           mControllerDragChangedDirection = true;
         }
         mControllerLastDragDirection = direction;
       }
       // NOTE: gfxPrefs::ToolbarScrollThreshold() returns a percentage as an int32_t. So multiply it by 0.01f to convert.
       const uint32_t dragThreshold = Abs(std::lround(0.01f * gfxPrefs::ToolbarScrollThreshold() * mControllerCompositionHeight));
       if ((Abs(mControllerTotalDistance.value) > dragThreshold) && (delta != 0)) {
         mControllerDragThresholdReached = true;
-        status = ProcessTouchDelta(currentToolbarState, delta, multiTouch.mTime);
+        status = ProcessTouchDelta(aApz, currentToolbarState, delta, multiTouch.mTime);
       }
       mControllerLastEventTimeStamp = multiTouch.mTime;
     }
     break;
   }
   case MultiTouchInput::MULTITOUCH_END:
   case MultiTouchInput::MULTITOUCH_CANCEL:
     // last finger was lifted
@@ -582,19 +582,20 @@ AndroidDynamicToolbarAnimator::Shutdown(
   if (mCompositorToolbarPixels) {
     RefPtr<UiCompositorControllerParent> uiController = UiCompositorControllerParent::GetFromRootLayerTreeId(mRootLayerTreeId);
     uiController->DeallocShmem(mCompositorToolbarPixels.ref());
     mCompositorToolbarPixels.reset();
   }
 }
 
 nsEventStatus
-AndroidDynamicToolbarAnimator::ProcessTouchDelta(StaticToolbarState aCurrentToolbarState, ScreenIntCoord aDelta, uint32_t aTimeStamp)
+AndroidDynamicToolbarAnimator::ProcessTouchDelta(const RefPtr<APZCTreeManager>& aApz, StaticToolbarState aCurrentToolbarState, ScreenIntCoord aDelta, uint32_t aTimeStamp)
 {
   MOZ_ASSERT(APZThreadUtils::IsControllerThread());
+  MOZ_ASSERT(aApz);
   nsEventStatus status = nsEventStatus_eIgnore;
 
   const bool tryingToHideToolbar = aDelta < 0;
 
   if (tryingToHideToolbar && !mControllerScrollingRootContent) {
     // This prevent the toolbar from hiding if a subframe is being scrolled up.
     // The toolbar will always become visible regardless what is being scrolled down.
     return status;
@@ -637,19 +638,20 @@ AndroidDynamicToolbarAnimator::ProcessTo
     // If there was no delta left over, the event was completely consumed.
     if (deltaRemainder == 0) {
       status = nsEventStatus_eConsumeNoDefault;
     }
 
     uint32_t timeDelta = aTimeStamp - mControllerLastEventTimeStamp;
     if (mControllerLastEventTimeStamp && timeDelta && aDelta) {
       float speed = -(float)aDelta / (float)timeDelta;
-      if (mApz) {
-        mApz->ProcessTouchVelocity(aTimeStamp, speed);
-      }
+      // we can't use mApz because we're on the controller thread, so we have
+      // the caller provide a RefPtr to the same underlying object, which should
+      // be safe to use.
+      aApz->ProcessTouchVelocity(aTimeStamp, speed);
     }
   }
 
   return status;
 }
 
 void
 AndroidDynamicToolbarAnimator::HandleTouchEnd(StaticToolbarState aCurrentToolbarState, ScreenIntCoord aCurrentTouch)
--- a/gfx/layers/apz/src/AndroidDynamicToolbarAnimator.h
+++ b/gfx/layers/apz/src/AndroidDynamicToolbarAnimator.h
@@ -55,17 +55,17 @@ public:
   explicit AndroidDynamicToolbarAnimator(APZCTreeManager* aApz);
   void Initialize(LayersId aRootLayerTreeId);
   void ClearTreeManager();
   // Used to intercept events to determine if the event affects the toolbar.
   // May apply translation to touch events if the toolbar is visible.
   // Returns nsEventStatus_eIgnore when the event is not consumed and
   // nsEventStatus_eConsumeNoDefault when the event was used to translate the
   // toolbar.
-  nsEventStatus ReceiveInputEvent(InputData& aEvent, const ScreenPoint& aScrollOffset);
+  nsEventStatus ReceiveInputEvent(const RefPtr<APZCTreeManager>& aApz, InputData& aEvent, const ScreenPoint& aScrollOffset);
   void SetMaxToolbarHeight(ScreenIntCoord aHeight);
   // When a pinned reason is set to true, the animator will prevent
   // touch events from altering the height of the toolbar. All pinned
   // reasons must be cleared before touch events will affect the toolbar.
   // Animation requests from the UI thread are still honored even if any
   // pin reason is set. This allows the UI thread to pin the toolbar for
   // full screen and then request the animator hide the toolbar.
   void SetPinned(bool aPinned, int32_t aReason);
@@ -128,17 +128,17 @@ protected:
     eAnimationStopPending
   };
   enum AnimationStyle {
     eImmediate,
     eAnimate
   };
 
   ~AndroidDynamicToolbarAnimator(){}
-  nsEventStatus ProcessTouchDelta(StaticToolbarState aCurrentToolbarState, ScreenIntCoord aDelta, uint32_t aTimeStamp);
+  nsEventStatus ProcessTouchDelta(const RefPtr<APZCTreeManager>& aApz, StaticToolbarState aCurrentToolbarState, ScreenIntCoord aDelta, uint32_t aTimeStamp);
   // Called when a touch ends
   void HandleTouchEnd(StaticToolbarState aCurrentToolbarState, ScreenIntCoord aCurrentTouch);
   // Sends a message to the UI thread. May be called from any thread
   void PostMessage(int32_t aMessage);
   void UpdateCompositorToolbarHeight(ScreenIntCoord aHeight);
   void UpdateControllerToolbarHeight(ScreenIntCoord aHeight, ScreenIntCoord aMaxHeight = -1);
   void UpdateControllerSurfaceHeight(ScreenIntCoord aHeight);
   void UpdateControllerCompositionHeight(ScreenIntCoord aHeight);
new file mode 100644
--- /dev/null
+++ b/js/src/jit-test/tests/wasm/memory-bulk.js
@@ -0,0 +1,712 @@
+
+//-----------------------------------------------------------
+// Test helpers
+function checkRange(arr, minIx, maxIxPlusOne, expectedValue)
+{
+    for (let i = minIx; i < maxIxPlusOne; i++) {
+        assertEq(arr[i], expectedValue);
+    }
+}
+
+//-----------------------------------------------------------
+// Test cases for memory.fill
+
+// Range valid
+{
+    let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn")
+         (memory.fill (i32.const 0xFF00) (i32.const 0x55) (i32.const 256))
+       )
+     )`
+    )));
+    inst.exports.testfn();
+    let b = new Uint8Array(inst.exports.memory.buffer);
+    checkRange(b, 0x00000, 0x0FF00, 0x00);
+    checkRange(b, 0x0FF00, 0x10000, 0x55);
+}
+
+// Range invalid
+{
+    let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn")
+         (memory.fill (i32.const 0xFF00) (i32.const 0x55) (i32.const 257))
+       )
+     )`
+    )));
+    assertErrorMessage(() => inst.exports.testfn(),
+                       WebAssembly.RuntimeError, /index out of bounds/);
+}
+
+// Wraparound the end of 32-bit offset space
+{
+    let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn")
+         (memory.fill (i32.const 0xFFFFFF00) (i32.const 0x55) (i32.const 257))
+       )
+     )`
+    )));
+    assertErrorMessage(() => inst.exports.testfn(),
+                       WebAssembly.RuntimeError, /index out of bounds/);
+}
+
+// Zero len with offset in-bounds is a no-op
+{
+    let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn")
+         (memory.fill (i32.const 0x12) (i32.const 0x55) (i32.const 0))
+       )
+     )`
+    )));
+    inst.exports.testfn();
+    let b = new Uint8Array(inst.exports.memory.buffer);
+    checkRange(b, 0x00000, 0x10000, 0x00);
+}
+
+// Zero len with offset out-of-bounds gets an exception
+{
+    let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn")
+         (memory.fill (i32.const 0x10000) (i32.const 0x55) (i32.const 0))
+       )
+     )`
+    )));
+    assertErrorMessage(() => inst.exports.testfn(),
+                       WebAssembly.RuntimeError, /index out of bounds/);
+}
+
+// Very large range
+{
+    let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn")
+         (memory.fill (i32.const 0x1) (i32.const 0xAA) (i32.const 0xFFFE))
+       )
+     )`
+    )));
+    inst.exports.testfn();
+    let b = new Uint8Array(inst.exports.memory.buffer);
+    checkRange(b, 0x00000, 0x00001, 0x00);
+    checkRange(b, 0x00001, 0x0FFFF, 0xAA);
+    checkRange(b, 0x0FFFF, 0x10000, 0x00);
+}
+
+// Sequencing
+{
+    let i = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn") (result i32)
+         (memory.fill (i32.const 0x12) (i32.const 0x55) (i32.const 10))
+         (memory.fill (i32.const 0x15) (i32.const 0xAA) (i32.const 4))
+         i32.const 99
+       )
+     )`
+    )));
+    i.exports.testfn();
+    let b = new Uint8Array(i.exports.memory.buffer);
+    checkRange(b, 0x0,     0x12+0,  0x00);
+    checkRange(b, 0x12+0,  0x12+3,  0x55);
+    checkRange(b, 0x12+3,  0x12+7,  0xAA);
+    checkRange(b, 0x12+7,  0x12+10, 0x55);
+    checkRange(b, 0x12+10, 0x10000, 0x00);
+}
+
+
+//-----------------------------------------------------------
+// Test cases for memory.copy
+
+// Both ranges valid.  Copy 5 bytes backwards by 1 (overlapping).
+// result = 0x00--(09) 0x55--(11) 0x00--(pagesize-20)
+{
+    let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn")
+         (memory.fill (i32.const 10) (i32.const 0x55) (i32.const 10))
+         (memory.copy (i32.const 9) (i32.const 10) (i32.const 5))
+       )
+     )`
+    )));
+    inst.exports.testfn();
+    let b = new Uint8Array(inst.exports.memory.buffer);
+    checkRange(b, 0,    0+9,     0x00);
+    checkRange(b, 9,    9+11,    0x55);
+    checkRange(b, 9+11, 0x10000, 0x00);
+}
+
+// Both ranges valid.  Copy 5 bytes forwards by 1 (overlapping).
+// result = 0x00--(10) 0x55--(11) 0x00--(pagesize-19)
+{
+    let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn")
+         (memory.fill (i32.const 10) (i32.const 0x55) (i32.const 10))
+         (memory.copy (i32.const 16) (i32.const 15) (i32.const 5))
+       )
+     )`
+    )));
+    inst.exports.testfn();
+    let b = new Uint8Array(inst.exports.memory.buffer);
+    checkRange(b, 0,     0+10,    0x00);
+    checkRange(b, 10,    10+11,   0x55);
+    checkRange(b, 10+11, 0x10000, 0x00);
+}
+
+// Destination range invalid
+{
+    let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn")
+         (memory.copy (i32.const 0xFF00) (i32.const 0x8000) (i32.const 257))
+       )
+     )`
+    )));
+    assertErrorMessage(() => inst.exports.testfn(),
+                       WebAssembly.RuntimeError, /index out of bounds/);
+}
+
+// Destination wraparound the end of 32-bit offset space
+{
+    let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn")
+         (memory.copy (i32.const 0xFFFFFF00) (i32.const 0x4000) (i32.const 257))
+       )
+     )`
+    )));
+    assertErrorMessage(() => inst.exports.testfn(),
+                       WebAssembly.RuntimeError, /index out of bounds/);
+}
+
+// Source range invalid
+{
+    let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn")
+         (memory.copy (i32.const 0x8000) (i32.const 0xFF00) (i32.const 257))
+       )
+     )`
+    )));
+    assertErrorMessage(() => inst.exports.testfn(),
+                       WebAssembly.RuntimeError, /index out of bounds/);
+}
+
+// Source wraparound the end of 32-bit offset space
+{
+    let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn")
+         (memory.copy (i32.const 0x4000) (i32.const 0xFFFFFF00) (i32.const 257))
+       )
+     )`
+    )));
+    assertErrorMessage(() => inst.exports.testfn(),
+                       WebAssembly.RuntimeError, /index out of bounds/);
+}
+
+// Zero len with both offsets in-bounds is a no-op
+{
+    let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn")
+         (memory.fill (i32.const 0x0000) (i32.const 0x55) (i32.const 0x8000))
+         (memory.fill (i32.const 0x8000) (i32.const 0xAA) (i32.const 0x8000))
+         (memory.copy (i32.const 0x9000) (i32.const 0x7000) (i32.const 0))
+       )
+     )`
+    )));
+    inst.exports.testfn();
+    let b = new Uint8Array(inst.exports.memory.buffer);
+    checkRange(b, 0x00000, 0x08000, 0x55);
+    checkRange(b, 0x08000, 0x10000, 0xAA);
+}
+
+// Zero len with dest offset out-of-bounds is an exception
+{
+    let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn")
+         (memory.copy (i32.const 0x10000) (i32.const 0x7000) (i32.const 0))
+       )
+     )`
+    )));
+    assertErrorMessage(() => inst.exports.testfn(),
+                       WebAssembly.RuntimeError, /index out of bounds/);
+}
+
+// Zero len with src offset out-of-bounds is an exception
+{
+    let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn")
+         (memory.copy (i32.const 0x9000) (i32.const 0x10000) (i32.const 0))
+       )
+     )`
+    )));
+    assertErrorMessage(() => inst.exports.testfn(),
+                       WebAssembly.RuntimeError, /index out of bounds/);
+}
+
+// 100 random fills followed by 100 random copies, in a single-page buffer,
+// followed by verification of the (now heavily mashed-around) buffer.
+{
+    let inst = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(
+    `(module
+       (memory (export "memory") 1 1)
+       (func (export "testfn")
+         (memory.fill (i32.const 17767) (i32.const 1) (i32.const 1344))
+         (memory.fill (i32.const 39017) (i32.const 2) (i32.const 1055))
+         (memory.fill (i32.const 56401) (i32.const 3) (i32.const 988))
+         (memory.fill (i32.const 37962) (i32.const 4) (i32.const 322))
+         (memory.fill (i32.const 7977) (i32.const 5) (i32.const 1994))
+         (memory.fill (i32.const 22714) (i32.const 6) (i32.const 3036))
+         (memory.fill (i32.const 16882) (i32.const 7) (i32.const 2372))
+         (memory.fill (i32.const 43491) (i32.const 8) (i32.const 835))
+         (memory.fill (i32.const 124) (i32.const 9) (i32.const 1393))
+         (memory.fill (i32.const 2132) (i32.const 10) (i32.const 2758))
+         (memory.fill (i32.const 8987) (i32.const 11) (i32.const 3098))
+         (memory.fill (i32.const 52711) (i32.const 12) (i32.const 741))
+         (memory.fill (i32.const 3958) (i32.const 13) (i32.const 2823))
+         (memory.fill (i32.const 49715) (i32.const 14) (i32.const 1280))
+         (memory.fill (i32.const 50377) (i32.const 15) (i32.const 1466))
+         (memory.fill (i32.const 20493) (i32.const 16) (i32.const 3158))
+         (memory.fill (i32.const 47665) (i32.const 17) (i32.const 544))
+         (memory.fill (i32.const 12451) (i32.const 18) (i32.const 2669))
+         (memory.fill (i32.const 24869) (i32.const 19) (i32.const 2651))
+         (memory.fill (i32.const 45317) (i32.const 20) (i32.const 1570))
+         (memory.fill (i32.const 43096) (i32.const 21) (i32.const 1691))
+         (memory.fill (i32.const 33886) (i32.const 22) (i32.const 646))
+         (memory.fill (i32.const 48555) (i32.const 23) (i32.const 1858))
+         (memory.fill (i32.const 53453) (i32.const 24) (i32.const 2657))
+         (memory.fill (i32.const 30363) (i32.const 25) (i32.const 981))
+         (memory.fill (i32.const 9300) (i32.const 26) (i32.const 1807))
+         (memory.fill (i32.const 50190) (i32.const 27) (i32.const 487))
+         (memory.fill (i32.const 62753) (i32.const 28) (i32.const 530))
+         (memory.fill (i32.const 36316) (i32.const 29) (i32.const 943))
+         (memory.fill (i32.const 6768) (i32.const 30) (i32.const 381))
+         (memory.fill (i32.const 51262) (i32.const 31) (i32.const 3089))
+         (memory.fill (i32.const 49729) (i32.const 32) (i32.const 658))
+         (memory.fill (i32.const 44540) (i32.const 33) (i32.const 1702))
+         (memory.fill (i32.const 33342) (i32.const 34) (i32.const 1092))
+         (memory.fill (i32.const 50814) (i32.const 35) (i32.const 1410))
+         (memory.fill (i32.const 47594) (i32.const 36) (i32.const 2204))
+         (memory.fill (i32.const 54123) (i32.const 37) (i32.const 2394))
+         (memory.fill (i32.const 55183) (i32.const 38) (i32.const 250))
+         (memory.fill (i32.const 22620) (i32.const 39) (i32.const 2097))
+         (memory.fill (i32.const 17132) (i32.const 40) (i32.const 3264))
+         (memory.fill (i32.const 54331) (i32.const 41) (i32.const 3299))
+         (memory.fill (i32.const 39474) (i32.const 42) (i32.const 2796))
+         (memory.fill (i32.const 36156) (i32.const 43) (i32.const 2070))
+         (memory.fill (i32.const 35308) (i32.const 44) (i32.const 2763))
+         (memory.fill (i32.const 32731) (i32.const 45) (i32.const 312))
+         (memory.fill (i32.const 63746) (i32.const 46) (i32.const 192))
+         (memory.fill (i32.const 30974) (i32.const 47) (i32.const 596))
+         (memory.fill (i32.const 16635) (i32.const 48) (i32.const 501))
+         (memory.fill (i32.const 57002) (i32.const 49) (i32.const 686))
+         (memory.fill (i32.const 34299) (i32.const 50) (i32.const 385))
+         (memory.fill (i32.const 60881) (i32.const 51) (i32.const 903))
+         (memory.fill (i32.const 61445) (i32.const 52) (i32.const 2390))
+         (memory.fill (i32.const 46972) (i32.const 53) (i32.const 1441))
+         (memory.fill (i32.const 25973) (i32.const 54) (i32.const 3162))
+         (memory.fill (i32.const 5566) (i32.const 55) (i32.const 2135))
+         (memory.fill (i32.const 35977) (i32.const 56) (i32.const 519))
+         (memory.fill (i32.const 44892) (i32.const 57) (i32.const 3280))
+         (memory.fill (i32.const 46760) (i32.const 58) (i32.const 1678))
+         (memory.fill (i32.const 46607) (i32.const 59) (i32.const 3168))
+         (memory.fill (i32.const 22449) (i32.const 60) (i32.const 1441))
+         (memory.fill (i32.const 58609) (i32.const 61) (i32.const 663))
+         (memory.fill (i32.const 32261) (i32.const 62) (i32.const 1671))
+         (memory.fill (i32.const 3063) (i32.const 63) (i32.const 721))
+         (memory.fill (i32.const 34025) (i32.const 64) (i32.const 84))
+         (memory.fill (i32.const 33338) (i32.const 65) (i32.const 2029))
+         (memory.fill (i32.const 36810) (i32.const 66) (i32.const 29))
+         (memory.fill (i32.const 19147) (i32.const 67) (i32.const 3034))
+         (memory.fill (i32.const 12616) (i32.const 68) (i32.const 1043))
+         (memory.fill (i32.const 18276) (i32.const 69) (i32.const 3324))
+         (memory.fill (i32.const 4639) (i32.const 70) (i32.const 1091))
+         (memory.fill (i32.const 16158) (i32.const 71) (i32.const 1997))
+         (memory.fill (i32.const 18204) (i32.const 72) (i32.const 2259))
+         (memory.fill (i32.const 50532) (i32.const 73) (i32.const 3189))
+         (memory.fill (i32.const 11028) (i32.const 74) (i32.const 1968))
+         (memory.fill (i32.const 15962) (i32.const 75) (i32.const 1455))
+         (memory.fill (i32.const 45406) (i32.const 76) (i32.const 1177))
+         (memory.fill (i32.const 54137) (i32.const 77) (i32.const 1568))
+         (memory.fill (i32.const 33083) (i32.const 78) (i32.const 1642))
+         (memory.fill (i32.const 61028) (i32.const 79) (i32.const 3284))
+         (memory.fill (i32.const 51729) (i32.const 80) (i32.const 223))
+         (memory.fill (i32.const 4361) (i32.const 81) (i32.const 2171))
+         (memory.fill (i32.const 57514) (i32.const 82) (i32.const 1322))
+         (memory.fill (i32.const 55724) (i32.const 83) (i32.const 2648))
+         (memory.fill (i32.const 24091) (i32.const 84) (i32.const 1045))
+         (memory.fill (i32.const 43183) (i32.const 85) (i32.const 3097))
+         (memory.fill (i32.const 32307) (i32.const 86) (i32.const 2796))
+         (memory.fill (i32.const 3811) (i32.const 87) (i32.const 2010))
+         (memory.fill (i32.const 54856) (i32.const 88) (i32.const 0))
+         (memory.fill (i32.const 49941) (i32.const 89) (i32.const 2069))
+         (memory.fill (i32.const 20411) (i32.const 90) (i32.const 2896))
+         (memory.fill (i32.const 33826) (i32.const 91) (i32.const 192))
+         (memory.fill (i32.const 9402) (i32.const 92) (i32.const 2195))
+         (memory.fill (i32.const 12413) (i32.const 93) (i32.const 24))
+         (memory.fill (i32.const 14091) (i32.const 94) (i32.const 577))
+         (memory.fill (i32.const 44058) (i32.const 95) (i32.const 2089))
+         (memory.fill (i32.const 36735) (i32.const 96) (i32.const 3436))
+         (memory.fill (i32.const 23288) (i32.const 97) (i32.const 2765))
+         (memory.fill (i32.const 6392) (i32.const 98) (i32.const 830))
+         (memory.fill (i32.const 33307) (i32.const 99) (i32.const 1938))
+         (memory.fill (i32.const 21941) (i32.const 100) (i32.const 2750))
+         (memory.copy (i32.const 59214) (i32.const 54248) (i32.const 2098))
+         (memory.copy (i32.const 63026) (i32.const 39224) (i32.const 230))
+         (memory.copy (i32.const 51833) (i32.const 23629) (i32.const 2300))
+         (memory.copy (i32.const 6708) (i32.const 23996) (i32.const 639))
+         (memory.copy (i32.const 6990) (i32.const 33399) (i32.const 1097))
+         (memory.copy (i32.const 19403) (i32.const 10348) (i32.const 3197))
+         (memory.copy (i32.const 27308) (i32.const 54406) (i32.const 100))
+         (memory.copy (i32.const 27221) (i32.const 43682) (i32.const 1717))
+         (memory.copy (i32.const 60528) (i32.const 8629) (i32.const 119))
+         (memory.copy (i32.const 5947) (i32.const 2308) (i32.const 658))
+         (memory.copy (i32.const 4787) (i32.const 51631) (i32.const 2269))
+         (memory.copy (i32.const 12617) (i32.const 19197) (i32.const 833))
+         (memory.copy (i32.const 11854) (i32.const 46505) (i32.const 3300))
+         (memory.copy (i32.const 11376) (i32.const 45012) (i32.const 2281))
+         (memory.copy (i32.const 34186) (i32.const 6697) (i32.const 2572))
+         (memory.copy (i32.const 4936) (i32.const 1690) (i32.const 1328))
+         (memory.copy (i32.const 63164) (i32.const 7637) (i32.const 1670))
+         (memory.copy (i32.const 44568) (i32.const 18344) (i32.const 33))
+         (memory.copy (i32.const 43918) (i32.const 22348) (i32.const 1427))
+         (memory.copy (i32.const 46637) (i32.const 49819) (i32.const 1434))
+         (memory.copy (i32.const 63684) (i32.const 8755) (i32.const 834))
+         (memory.copy (i32.const 33485) (i32.const 20131) (i32.const 3317))
+         (memory.copy (i32.const 40575) (i32.const 54317) (i32.const 3201))
+         (memory.copy (i32.const 25812) (i32.const 59254) (i32.const 2452))
+         (memory.copy (i32.const 19678) (i32.const 56882) (i32.const 346))
+         (memory.copy (i32.const 15852) (i32.const 35914) (i32.const 2430))
+         (memory.copy (i32.const 11824) (i32.const 35574) (i32.const 300))
+         (memory.copy (i32.const 59427) (i32.const 13957) (i32.const 3153))
+         (memory.copy (i32.const 34299) (i32.const 60594) (i32.const 1281))
+         (memory.copy (i32.const 8964) (i32.const 12276) (i32.const 943))
+         (memory.copy (i32.const 2827) (i32.const 10425) (i32.const 1887))
+         (memory.copy (i32.const 43194) (i32.const 43910) (i32.const 738))
+         (memory.copy (i32.const 63038) (i32.const 18949) (i32.const 122))
+         (memory.copy (i32.const 24044) (i32.const 44761) (i32.const 1755))
+         (memory.copy (i32.const 22608) (i32.const 14755) (i32.const 702))
+         (memory.copy (i32.const 11284) (i32.const 26579) (i32.const 1830))
+         (memory.copy (i32.const 23092) (i32.const 20471) (i32.const 1064))
+         (memory.copy (i32.const 57248) (i32.const 54770) (i32.const 2631))
+         (memory.copy (i32.const 25492) (i32.const 1025) (i32.const 3113))
+         (memory.copy (i32.const 49588) (i32.const 44220) (i32.const 975))
+         (memory.copy (i32.const 28280) (i32.const 41722) (i32.const 2336))
+         (memory.copy (i32.const 61289) (i32.const 230) (i32.const 2872))
+         (memory.copy (i32.const 22480) (i32.const 52506) (i32.const 2197))
+         (memory.copy (i32.const 40553) (i32.const 9578) (i32.const 1958))
+         (memory.copy (i32.const 29004) (i32.const 20862) (i32.const 2186))
+         (memory.copy (i32.const 53029) (i32.const 43955) (i32.const 1037))
+         (memory.copy (i32.const 25476) (i32.const 35667) (i32.const 1650))
+         (memory.copy (i32.const 58516) (i32.const 45819) (i32.const 1986))
+         (memory.copy (i32.const 38297) (i32.const 5776) (i32.const 1955))
+         (memory.copy (i32.const 28503) (i32.const 55364) (i32.const 2368))
+         (memory.copy (i32.const 62619) (i32.const 18108) (i32.const 1356))
+         (memory.copy (i32.const 50149) (i32.const 13861) (i32.const 382))
+         (memory.copy (i32.const 16904) (i32.const 36341) (i32.const 1900))
+         (memory.copy (i32.const 48098) (i32.const 11358) (i32.const 2807))
+         (memory.copy (i32.const 28512) (i32.const 40362) (i32.const 323))
+         (memory.copy (i32.const 35506) (i32.const 27856) (i32.const 1670))
+         (memory.copy (i32.const 62970) (i32.const 53332) (i32.const 1341))
+         (memory.copy (i32.const 14133) (i32.const 46312) (i32.const 644))
+         (memory.copy (i32.const 29030) (i32.const 19074) (i32.const 496))
+         (memory.copy (i32.const 44952) (i32.const 47577) (i32.const 2784))
+         (memory.copy (i32.const 39559) (i32.const 44661) (i32.const 1350))
+         (memory.copy (i32.const 10352) (i32.const 29274) (i32.const 1475))
+         (memory.copy (i32.const 46911) (i32.const 46178) (i32.const 1467))
+         (memory.copy (i32.const 4905) (i32.const 28740) (i32.const 1895))
+         (memory.copy (i32.const 38012) (i32.const 57253) (i32.const 1751))
+         (memory.copy (i32.const 26446) (i32.const 27223) (i32.const 1127))
+         (memory.copy (i32.const 58835) (i32.const 24657) (i32.const 1063))
+         (memory.copy (i32.const 61356) (i32.const 38790) (i32.const 766))
+         (memory.copy (i32.const 44160) (i32.const 2284) (i32.const 1520))
+         (memory.copy (i32.const 32740) (i32.const 47237) (i32.const 3014))
+         (memory.copy (i32.const 11148) (i32.const 21260) (i32.const 1011))
+         (memory.copy (i32.const 7665) (i32.const 31612) (i32.const 3034))
+         (memory.copy (i32.const 18044) (i32.const 12987) (i32.const 3320))
+         (memory.copy (i32.const 57306) (i32.const 55905) (i32.const 308))
+         (memory.copy (i32.const 24675) (i32.const 16815) (i32.const 1155))
+         (memory.copy (i32.const 19900) (i32.const 10115) (i32.const 722))
+         (memory.copy (i32.const 2921) (i32.const 5935) (i32.const 2370))
+         (memory.copy (i32.const 32255) (i32.const 50095) (i32.const 2926))
+         (memory.copy (i32.const 15126) (i32.const 17299) (i32.const 2607))
+         (memory.copy (i32.const 45575) (i32.const 28447) (i32.const 2045))
+         (memory.copy (i32.const 55149) (i32.const 36113) (i32.const 2596))
+         (memory.copy (i32.const 28461) (i32.const 54157) (i32.const 1168))
+         (memory.copy (i32.const 47951) (i32.const 53385) (i32.const 3137))
+         (memory.copy (i32.const 30646) (i32.const 45155) (i32.const 2649))
+         (memory.copy (i32.const 5057) (i32.const 4295) (i32.const 52))
+         (memory.copy (i32.const 6692) (i32.const 24195) (i32.const 441))
+         (memory.copy (i32.const 32984) (i32.const 27117) (i32.const 3445))
+         (memory.copy (i32.const 32530) (i32.const 59372) (i32.const 2785))
+         (memory.copy (i32.const 34361) (i32.const 8962) (i32.const 2406))
+         (memory.copy (i32.const 17893) (i32.const 54538) (i32.const 3381))
+         (memory.copy (i32.const 22685) (i32.const 44151) (i32.const 136))
+         (memory.copy (i32.const 59089) (i32.const 7077) (i32.const 1045))
+         (memory.copy (i32.const 42945) (i32.const 55028) (i32.const 2389))
+         (memory.copy (i32.const 44693) (i32.const 20138) (i32.const 877))
+         (memory.copy (i32.const 36810) (i32.const 25196) (i32.const 3447))
+         (memory.copy (i32.const 45742) (i32.const 31888) (i32.const 854))
+         (memory.copy (i32.const 24236) (i32.const 31866) (i32.const 1377))
+         (memory.copy (i32.const 33778) (i32.const 692) (i32.const 1594))
+         (memory.copy (i32.const 60618) (i32.const 18585) (i32.const 2987))
+         (memory.copy (i32.const 50370) (i32.const 41271) (i32.const 1406))
+       )
+     )`
+    )));
+    inst.exports.testfn();
+    let b = new Uint8Array(inst.exports.memory.buffer);
+    checkRange(b, 0, 124, 0);
+    checkRange(b, 124, 1517, 9);
+    checkRange(b, 1517, 2132, 0);
+    checkRange(b, 2132, 2827, 10);
+    checkRange(b, 2827, 2921, 92);
+    checkRange(b, 2921, 3538, 83);
+    checkRange(b, 3538, 3786, 77);
+    checkRange(b, 3786, 4042, 97);
+    checkRange(b, 4042, 4651, 99);
+    checkRange(b, 4651, 5057, 0);
+    checkRange(b, 5057, 5109, 99);
+    checkRange(b, 5109, 5291, 0);
+    checkRange(b, 5291, 5524, 72);
+    checkRange(b, 5524, 5691, 92);
+    checkRange(b, 5691, 6552, 83);
+    checkRange(b, 6552, 7133, 77);
+    checkRange(b, 7133, 7665, 99);
+    checkRange(b, 7665, 8314, 0);
+    checkRange(b, 8314, 8360, 62);
+    checkRange(b, 8360, 8793, 86);
+    checkRange(b, 8793, 8979, 83);
+    checkRange(b, 8979, 9373, 79);
+    checkRange(b, 9373, 9518, 95);
+    checkRange(b, 9518, 9934, 59);
+    checkRange(b, 9934, 10087, 77);
+    checkRange(b, 10087, 10206, 5);
+    checkRange(b, 10206, 10230, 77);
+    checkRange(b, 10230, 10249, 41);
+    checkRange(b, 10249, 11148, 83);
+    checkRange(b, 11148, 11356, 74);
+    checkRange(b, 11356, 11380, 93);
+    checkRange(b, 11380, 11939, 74);
+    checkRange(b, 11939, 12159, 68);
+    checkRange(b, 12159, 12575, 83);
+    checkRange(b, 12575, 12969, 79);
+    checkRange(b, 12969, 13114, 95);
+    checkRange(b, 13114, 14133, 59);
+    checkRange(b, 14133, 14404, 76);
+    checkRange(b, 14404, 14428, 57);
+    checkRange(b, 14428, 14458, 59);
+    checkRange(b, 14458, 14580, 32);
+    checkRange(b, 14580, 14777, 89);
+    checkRange(b, 14777, 15124, 59);
+    checkRange(b, 15124, 15126, 36);
+    checkRange(b, 15126, 15192, 100);
+    checkRange(b, 15192, 15871, 96);
+    checkRange(b, 15871, 15998, 95);
+    checkRange(b, 15998, 17017, 59);
+    checkRange(b, 17017, 17288, 76);
+    checkRange(b, 17288, 17312, 57);
+    checkRange(b, 17312, 17342, 59);
+    checkRange(b, 17342, 17464, 32);
+    checkRange(b, 17464, 17661, 89);
+    checkRange(b, 17661, 17727, 59);
+    checkRange(b, 17727, 17733, 5);
+    checkRange(b, 17733, 17893, 96);
+    checkRange(b, 17893, 18553, 77);
+    checkRange(b, 18553, 18744, 42);
+    checkRange(b, 18744, 18801, 76);
+    checkRange(b, 18801, 18825, 57);
+    checkRange(b, 18825, 18876, 59);
+    checkRange(b, 18876, 18885, 77);
+    checkRange(b, 18885, 18904, 41);
+    checkRange(b, 18904, 19567, 83);
+    checkRange(b, 19567, 20403, 96);
+    checkRange(b, 20403, 21274, 77);
+    checkRange(b, 21274, 21364, 100);
+    checkRange(b, 21364, 21468, 74);
+    checkRange(b, 21468, 21492, 93);
+    checkRange(b, 21492, 22051, 74);
+    checkRange(b, 22051, 22480, 68);
+    checkRange(b, 22480, 22685, 100);
+    checkRange(b, 22685, 22694, 68);
+    checkRange(b, 22694, 22821, 10);
+    checkRange(b, 22821, 22869, 100);
+    checkRange(b, 22869, 24107, 97);
+    checkRange(b, 24107, 24111, 37);
+    checkRange(b, 24111, 24236, 77);
+    checkRange(b, 24236, 24348, 72);
+    checkRange(b, 24348, 24515, 92);
+    checkRange(b, 24515, 24900, 83);
+    checkRange(b, 24900, 25136, 95);
+    checkRange(b, 25136, 25182, 85);
+    checkRange(b, 25182, 25426, 68);
+    checkRange(b, 25426, 25613, 89);
+    checkRange(b, 25613, 25830, 96);
+    checkRange(b, 25830, 26446, 100);
+    checkRange(b, 26446, 26517, 10);
+    checkRange(b, 26517, 27468, 92);
+    checkRange(b, 27468, 27503, 95);
+    checkRange(b, 27503, 27573, 77);
+    checkRange(b, 27573, 28245, 92);
+    checkRange(b, 28245, 28280, 95);
+    checkRange(b, 28280, 29502, 77);
+    checkRange(b, 29502, 29629, 42);
+    checkRange(b, 29629, 30387, 83);
+    checkRange(b, 30387, 30646, 77);
+    checkRange(b, 30646, 31066, 92);
+    checkRange(b, 31066, 31131, 77);
+    checkRange(b, 31131, 31322, 42);
+    checkRange(b, 31322, 31379, 76);
+    checkRange(b, 31379, 31403, 57);
+    checkRange(b, 31403, 31454, 59);
+    checkRange(b, 31454, 31463, 77);
+    checkRange(b, 31463, 31482, 41);
+    checkRange(b, 31482, 31649, 83);
+    checkRange(b, 31649, 31978, 72);
+    checkRange(b, 31978, 32145, 92);
+    checkRange(b, 32145, 32530, 83);
+    checkRange(b, 32530, 32766, 95);
+    checkRange(b, 32766, 32812, 85);
+    checkRange(b, 32812, 33056, 68);
+    checkRange(b, 33056, 33660, 89);
+    checkRange(b, 33660, 33752, 59);
+    checkRange(b, 33752, 33775, 36);
+    checkRange(b, 33775, 33778, 32);
+    checkRange(b, 33778, 34603, 9);
+    checkRange(b, 34603, 35218, 0);
+    checkRange(b, 35218, 35372, 10);
+    checkRange(b, 35372, 35486, 77);
+    checkRange(b, 35486, 35605, 5);
+    checkRange(b, 35605, 35629, 77);
+    checkRange(b, 35629, 35648, 41);
+    checkRange(b, 35648, 36547, 83);
+    checkRange(b, 36547, 36755, 74);
+    checkRange(b, 36755, 36767, 93);
+    checkRange(b, 36767, 36810, 83);
+    checkRange(b, 36810, 36839, 100);
+    checkRange(b, 36839, 37444, 96);
+    checkRange(b, 37444, 38060, 100);
+    checkRange(b, 38060, 38131, 10);
+    checkRange(b, 38131, 39082, 92);
+    checkRange(b, 39082, 39117, 95);
+    checkRange(b, 39117, 39187, 77);
+    checkRange(b, 39187, 39859, 92);
+    checkRange(b, 39859, 39894, 95);
+    checkRange(b, 39894, 40257, 77);
+    checkRange(b, 40257, 40344, 89);
+    checkRange(b, 40344, 40371, 59);
+    checkRange(b, 40371, 40804, 77);
+    checkRange(b, 40804, 40909, 5);
+    checkRange(b, 40909, 42259, 92);
+    checkRange(b, 42259, 42511, 77);
+    checkRange(b, 42511, 42945, 83);
+    checkRange(b, 42945, 43115, 77);
+    checkRange(b, 43115, 43306, 42);
+    checkRange(b, 43306, 43363, 76);
+    checkRange(b, 43363, 43387, 57);
+    checkRange(b, 43387, 43438, 59);
+    checkRange(b, 43438, 43447, 77);
+    checkRange(b, 43447, 43466, 41);
+    checkRange(b, 43466, 44129, 83);
+    checkRange(b, 44129, 44958, 96);
+    checkRange(b, 44958, 45570, 77);
+    checkRange(b, 45570, 45575, 92);
+    checkRange(b, 45575, 45640, 77);
+    checkRange(b, 45640, 45742, 42);
+    checkRange(b, 45742, 45832, 72);
+    checkRange(b, 45832, 45999, 92);
+    checkRange(b, 45999, 46384, 83);
+    checkRange(b, 46384, 46596, 95);
+    checkRange(b, 46596, 46654, 92);
+    checkRange(b, 46654, 47515, 83);
+    checkRange(b, 47515, 47620, 77);
+    checkRange(b, 47620, 47817, 79);
+    checkRange(b, 47817, 47951, 95);
+    checkRange(b, 47951, 48632, 100);
+    checkRange(b, 48632, 48699, 97);
+    checkRange(b, 48699, 48703, 37);
+    checkRange(b, 48703, 49764, 77);
+    checkRange(b, 49764, 49955, 42);
+    checkRange(b, 49955, 50012, 76);
+    checkRange(b, 50012, 50036, 57);
+    checkRange(b, 50036, 50087, 59);
+    checkRange(b, 50087, 50096, 77);
+    checkRange(b, 50096, 50115, 41);
+    checkRange(b, 50115, 50370, 83);
+    checkRange(b, 50370, 51358, 92);
+    checkRange(b, 51358, 51610, 77);
+    checkRange(b, 51610, 51776, 83);
+    checkRange(b, 51776, 51833, 89);
+    checkRange(b, 51833, 52895, 100);
+    checkRange(b, 52895, 53029, 97);
+    checkRange(b, 53029, 53244, 68);
+    checkRange(b, 53244, 54066, 100);
+    checkRange(b, 54066, 54133, 97);
+    checkRange(b, 54133, 54137, 37);
+    checkRange(b, 54137, 55198, 77);
+    checkRange(b, 55198, 55389, 42);
+    checkRange(b, 55389, 55446, 76);
+    checkRange(b, 55446, 55470, 57);
+    checkRange(b, 55470, 55521, 59);
+    checkRange(b, 55521, 55530, 77);
+    checkRange(b, 55530, 55549, 41);
+    checkRange(b, 55549, 56212, 83);
+    checkRange(b, 56212, 57048, 96);
+    checkRange(b, 57048, 58183, 77);
+    checkRange(b, 58183, 58202, 41);
+    checkRange(b, 58202, 58516, 83);
+    checkRange(b, 58516, 58835, 95);
+    checkRange(b, 58835, 58855, 77);
+    checkRange(b, 58855, 59089, 95);
+    checkRange(b, 59089, 59145, 77);
+    checkRange(b, 59145, 59677, 99);
+    checkRange(b, 59677, 60134, 0);
+    checkRange(b, 60134, 60502, 89);
+    checkRange(b, 60502, 60594, 59);
+    checkRange(b, 60594, 60617, 36);
+    checkRange(b, 60617, 60618, 32);
+    checkRange(b, 60618, 60777, 42);
+    checkRange(b, 60777, 60834, 76);
+    checkRange(b, 60834, 60858, 57);
+    checkRange(b, 60858, 60909, 59);
+    checkRange(b, 60909, 60918, 77);
+    checkRange(b, 60918, 60937, 41);
+    checkRange(b, 60937, 61600, 83);
+    checkRange(b, 61600, 62436, 96);
+    checkRange(b, 62436, 63307, 77);
+    checkRange(b, 63307, 63397, 100);
+    checkRange(b, 63397, 63501, 74);
+    checkRange(b, 63501, 63525, 93);
+    checkRange(b, 63525, 63605, 74);
+    checkRange(b, 63605, 63704, 100);
+    checkRange(b, 63704, 63771, 97);
+    checkRange(b, 63771, 63775, 37);
+    checkRange(b, 63775, 64311, 77);
+    checkRange(b, 64311, 64331, 26);
+    checkRange(b, 64331, 64518, 92);
+    checkRange(b, 64518, 64827, 11);
+    checkRange(b, 64827, 64834, 26);
+    checkRange(b, 64834, 65536, 0);
+}
--- a/js/src/moz.build
+++ b/js/src/moz.build
@@ -685,16 +685,17 @@ DIRS += [
     'build',
 ]
 
 FINAL_LIBRARY = 'js'
 
 if CONFIG['NIGHTLY_BUILD']:
     DEFINES['ENABLE_BINARYDATA'] = True
     DEFINES['ENABLE_SIMD'] = True
+    DEFINES['ENABLE_WASM_BULKMEM_OPS'] = True
     DEFINES['ENABLE_WASM_SATURATING_TRUNC_OPS'] = True
     DEFINES['ENABLE_WASM_SIGNEXTEND_OPS'] = True
     DEFINES['ENABLE_WASM_THREAD_OPS'] = True
     DEFINES['ENABLE_WASM_GC'] = True
 
 # An experiment we want to run on Nightly and early Beta: Can we change the JS
 # representation of an exported global from the global's value to an instance
 # of WebAssembly.Global without breaking existing wasm content?
--- a/js/src/wasm/WasmAST.h
+++ b/js/src/wasm/WasmAST.h
@@ -202,16 +202,20 @@ enum class AstExprKind
     ExtraConversionOperator,
 #endif
     First,
     GetGlobal,
     GetLocal,
     GrowMemory,
     If,
     Load,
+#ifdef ENABLE_WASM_BULKMEM_OPS
+    MemCopy,
+    MemFill,
+#endif
     Nop,
     Pop,
     RefNull,
     Return,
     SetGlobal,
     SetLocal,
     TeeLocal,
     Store,
@@ -669,16 +673,58 @@ class AstWake : public AstExpr
         address_(address),
         count_(count)
     {}
 
     const AstLoadStoreAddress& address() const { return address_; }
     AstExpr& count() const { return *count_; }
 };
 
+#ifdef ENABLE_WASM_BULKMEM_OPS
+class AstMemCopy : public AstExpr
+{
+    AstExpr* dest_;
+    AstExpr* src_;
+    AstExpr* len_;
+
+  public:
+    static const AstExprKind Kind = AstExprKind::MemCopy;
+    explicit AstMemCopy(AstExpr* dest, AstExpr* src, AstExpr* len)
+      : AstExpr(Kind, ExprType::I32),
+        dest_(dest),
+        src_(src),
+        len_(len)
+    {}
+
+    AstExpr& dest() const { return *dest_; }
+    AstExpr& src()  const { return *src_; }
+    AstExpr& len()  const { return *len_; }
+};
+
+class AstMemFill : public AstExpr
+{
+    AstExpr* start_;
+    AstExpr* val_;
+    AstExpr* len_;
+
+  public:
+    static const AstExprKind Kind = AstExprKind::MemFill;
+    explicit AstMemFill(AstExpr* start, AstExpr* val, AstExpr* len)
+      : AstExpr(Kind, ExprType::I32),
+        start_(start),
+        val_(val),
+        len_(len)
+    {}
+
+    AstExpr& start() const { return *start_; }
+    AstExpr& val()   const { return *val_; }
+    AstExpr& len()   const { return *len_; }
+};
+#endif
+
 class AstCurrentMemory final : public AstExpr
 {
   public:
     static const AstExprKind Kind = AstExprKind::CurrentMemory;
     explicit AstCurrentMemory()
       : AstExpr(Kind, ExprType::I32)
     {}
 };
--- a/js/src/wasm/WasmBaselineCompile.cpp
+++ b/js/src/wasm/WasmBaselineCompile.cpp
@@ -1880,16 +1880,17 @@ class BaseCompiler final : public BaseCo
     const ValTypeVector&        locals_;         // Types of parameters and locals
     bool                        deadCode_;       // Flag indicating we should decode & discard the opcode
     BCESet                      bceSafe_;        // Locals that have been bounds checked and not updated since
     ValTypeVector               SigD_;
     ValTypeVector               SigF_;
     MIRTypeVector               SigP_;
     MIRTypeVector               SigPI_;
     MIRTypeVector               SigPII_;
+    MIRTypeVector               SigPIII_;
     MIRTypeVector               SigPIIL_;
     MIRTypeVector               SigPILL_;
     NonAssertingLabel           returnLabel_;
 
     LatentOp                    latentOp_;       // Latent operation for branch (seen next)
     ValType                     latentType_;     // Operand type, if latentOp_ is true
     Assembler::Condition        latentIntCmp_;   // Comparison operator, if latentOp_ == Compare, int types
     Assembler::DoubleCondition  latentDoubleCmp_;// Comparison operator, if latentOp_ == Compare, float types
@@ -5769,17 +5770,17 @@ class BaseCompiler final : public BaseCo
     template<bool isSetLocal> MOZ_MUST_USE inline bool emitSetOrTeeLocal(uint32_t slot);
 
     void endBlock(ExprType type);
     void endLoop(ExprType type);
     void endIfThen();
     void endIfThenElse(ExprType type);
 
     void doReturn(ExprType returnType, bool popStack);
-    void pushReturned(const FunctionCall& call, ExprType type);
+    void pushReturnedIfNonVoid(const FunctionCall& call, ExprType type);
 
     void emitCompareI32(Assembler::Condition compareOp, ValType compareType);
     void emitCompareI64(Assembler::Condition compareOp, ValType compareType);
     void emitCompareF32(Assembler::DoubleCondition compareOp, ValType compareType);
     void emitCompareF64(Assembler::DoubleCondition compareOp, ValType compareType);
 
     void emitAddI32();
     void emitAddI64();
@@ -5891,16 +5892,20 @@ class BaseCompiler final : public BaseCo
     MOZ_MUST_USE bool emitAtomicCmpXchg(ValType type, Scalar::Type viewType);
     MOZ_MUST_USE bool emitAtomicLoad(ValType type, Scalar::Type viewType);
     MOZ_MUST_USE bool emitAtomicRMW(ValType type, Scalar::Type viewType, AtomicOp op);
     MOZ_MUST_USE bool emitAtomicStore(ValType type, Scalar::Type viewType);
     MOZ_MUST_USE bool emitWait(ValType type, uint32_t byteSize);
     MOZ_MUST_USE bool emitWake();
     MOZ_MUST_USE bool emitAtomicXchg(ValType type, Scalar::Type viewType);
     void emitAtomicXchg64(MemoryAccessDesc* access, ValType type, WantResult wantResult);
+#ifdef ENABLE_WASM_BULKMEM_OPS
+    MOZ_MUST_USE bool emitMemCopy();
+    MOZ_MUST_USE bool emitMemFill();
+#endif
 };
 
 void
 BaseCompiler::emitAddI32()
 {
     int32_t c;
     if (popConstI32(&c)) {
         RegI32 r = popI32();
@@ -7748,21 +7753,21 @@ BaseCompiler::emitCallArgs(const ValType
     for (size_t i = 0; i < numArgs; ++i)
         passArg(argTypes[i], peek(numArgs - 1 - i), baselineCall);
 
     masm.loadWasmTlsRegFromFrame();
     return true;
 }
 
 void
-BaseCompiler::pushReturned(const FunctionCall& call, ExprType type)
+BaseCompiler::pushReturnedIfNonVoid(const FunctionCall& call, ExprType type)
 {
     switch (type) {
       case ExprType::Void:
-        MOZ_CRASH("Compiler bug: attempt to push void return");
+        // There's no return value.  Do nothing.
         break;
       case ExprType::I32: {
         RegI32 rv = captureReturnedI32();
         pushI32(rv);
         break;
       }
       case ExprType::I64: {
         RegI64 rv = captureReturnedI64();
@@ -7833,18 +7838,17 @@ BaseCompiler::emitCall()
         callImport(env_.funcImportGlobalDataOffsets[funcIndex], baselineCall);
     else
         callDefinition(funcIndex, baselineCall);
 
     endCall(baselineCall, stackSpace);
 
     popValueStackBy(numArgs);
 
-    if (!IsVoid(sig.ret()))
-        pushReturned(baselineCall, sig.ret());
+    pushReturnedIfNonVoid(baselineCall, sig.ret());
 
     return true;
 }
 
 bool
 BaseCompiler::emitCallIndirect()
 {
     uint32_t lineOrBytecode = readCallSiteLineOrBytecode();
@@ -7880,18 +7884,17 @@ BaseCompiler::emitCallIndirect()
         return false;
 
     callIndirect(sigIndex, callee, baselineCall);
 
     endCall(baselineCall, stackSpace);
 
     popValueStackBy(numArgs);
 
-    if (!IsVoid(sig.ret()))
-        pushReturned(baselineCall, sig.ret());
+    pushReturnedIfNonVoid(baselineCall, sig.ret());
 
     return true;
 }
 
 void
 BaseCompiler::emitRound(RoundingMode roundingMode, ValType operandType)
 {
     if (operandType == ValType::F32) {
@@ -7939,17 +7942,17 @@ BaseCompiler::emitUnaryMathBuiltinCall(S
         return false;
 
     builtinCall(callee, baselineCall);
 
     endCall(baselineCall, stackSpace);
 
     popValueStackBy(numArgs);
 
-    pushReturned(baselineCall, retType);
+    pushReturnedIfNonVoid(baselineCall, retType);
 
     return true;
 }
 
 #ifdef RABALDR_INT_DIV_I64_CALLOUT
 void
 BaseCompiler::emitDivOrModI64BuiltinCall(SymbolicAddress callee, ValType operandType)
 {
@@ -8825,17 +8828,17 @@ BaseCompiler::emitInstanceCall(uint32_t 
         }
         passArg(t, peek(numArgs - i), &baselineCall);
     }
     builtinInstanceMethodCall(builtin, instanceArg, baselineCall);
     endCall(baselineCall, stackSpace);
 
     popValueStackBy(numArgs);
 
-    pushReturned(baselineCall, retType);
+    pushReturnedIfNonVoid(baselineCall, retType);
 }
 
 bool
 BaseCompiler::emitGrowMemory()
 {
     uint32_t lineOrBytecode = readCallSiteLineOrBytecode();
 
     Nothing arg;
@@ -9190,16 +9193,62 @@ BaseCompiler::emitWake()
     Label ok;
     masm.branchTest32(Assembler::NotSigned, ReturnReg, ReturnReg, &ok);
     trap(Trap::ThrowReported);
     masm.bind(&ok);
 
     return true;
 }
 
+#ifdef ENABLE_WASM_BULKMEM_OPS
+bool
+BaseCompiler::emitMemCopy()
+{
+    uint32_t lineOrBytecode = readCallSiteLineOrBytecode();
+
+    Nothing nothing;
+    if (!iter_.readMemCopy(ValType::I32, &nothing, &nothing, &nothing))
+        return false;
+
+    if (deadCode_)
+        return true;
+
+    emitInstanceCall(lineOrBytecode, SigPIII_, ExprType::Void, SymbolicAddress::MemCopy);
+
+    Label ok;
+    masm.branchTest32(Assembler::NotSigned, ReturnReg, ReturnReg, &ok);
+    trap(Trap::ThrowReported);
+    masm.bind(&ok);
+
+    return true;
+}
+
+bool
+BaseCompiler::emitMemFill()
+{
+    uint32_t lineOrBytecode = readCallSiteLineOrBytecode();
+
+    Nothing nothing;
+    if (!iter_.readMemFill(ValType::I32, &nothing, &nothing, &nothing))
+        return false;
+
+    if (deadCode_)
+        return true;
+
+    emitInstanceCall(lineOrBytecode, SigPIII_, ExprType::Void, SymbolicAddress::MemFill);
+
+    Label ok;
+    masm.branchTest32(Assembler::NotSigned, ReturnReg, ReturnReg, &ok);
+    trap(Trap::ThrowReported);
+    masm.bind(&ok);
+
+    return true;
+}
+#endif
+
 bool
 BaseCompiler::emitBody()
 {
     if (!iter_.readFunctionStart(sig().ret()))
         return false;
 
     initControl(controlItem());
 
@@ -9749,16 +9798,31 @@ BaseCompiler::emitBody()
 #endif
 
           // Memory Related
           case uint16_t(Op::GrowMemory):
             CHECK_NEXT(emitGrowMemory());
           case uint16_t(Op::CurrentMemory):
             CHECK_NEXT(emitCurrentMemory());
 
+#ifdef ENABLE_WASM_BULKMEM_OPS
+          // Bulk memory operations
+          case uint16_t(Op::CopyOrFillPrefix): {
+            switch (op.b1) {
+              case uint16_t(CopyOrFillOp::Copy):
+                CHECK_NEXT(emitMemCopy());
+              case uint16_t(CopyOrFillOp::Fill):
+                CHECK_NEXT(emitMemFill());
+              default:
+                return iter_.unrecognizedOpcode(&op);
+            }
+            break;
+          }
+#endif
+
 #ifdef ENABLE_WASM_GC
           case uint16_t(Op::RefNull):
             if (env_.gcTypesEnabled == HasGcTypes::False)
                 return iter_.unrecognizedOpcode(&op);
             CHECK_NEXT(emitRefNull());
             break;
           case uint16_t(Op::RefIsNull):
             if (env_.gcTypesEnabled == HasGcTypes::False)
@@ -10062,16 +10126,21 @@ BaseCompiler::init()
         return false;
     if (!SigPI_.append(MIRType::Pointer) || !SigPI_.append(MIRType::Int32))
         return false;
     if (!SigPII_.append(MIRType::Pointer) || !SigPII_.append(MIRType::Int32) ||
         !SigPII_.append(MIRType::Int32))
     {
         return false;
     }
+    if (!SigPIII_.append(MIRType::Pointer) || !SigPIII_.append(MIRType::Int32) ||
+        !SigPIII_.append(MIRType::Int32) || !SigPIII_.append(MIRType::Int32))
+    {
+        return false;
+    }
     if (!SigPIIL_.append(MIRType::Pointer) || !SigPIIL_.append(MIRType::Int32) ||
         !SigPIIL_.append(MIRType::Int32) || !SigPIIL_.append(MIRType::Int64))
     {
         return false;
     }
     if (!SigPILL_.append(MIRType::Pointer) || !SigPILL_.append(MIRType::Int32) ||
         !SigPILL_.append(MIRType::Int64) || !SigPILL_.append(MIRType::Int64))
     {
--- a/js/src/wasm/WasmBinaryConstants.h
+++ b/js/src/wasm/WasmBinaryConstants.h
@@ -331,17 +331,18 @@ enum class Op
     I64Extend16S                         = 0xc3,
     I64Extend32S                         = 0xc4,
 #endif
 
     // GC ops
     RefNull                              = 0xd0,
     RefIsNull                            = 0xd1,
 
-    FirstPrefix                          = 0xfc,
+    FirstPrefix                          = 0xfb,
+    CopyOrFillPrefix                     = 0xfb,
     NumericPrefix                        = 0xfc,
     ThreadPrefix                         = 0xfe,
     MozPrefix                            = 0xff,
 
     Limit                                = 0x100
 };
 
 inline bool
@@ -446,16 +447,27 @@ enum class ThreadOp
     I32AtomicCmpXchg16U                  = 0x4b,
     I64AtomicCmpXchg8U                   = 0x4c,
     I64AtomicCmpXchg16U                  = 0x4d,
     I64AtomicCmpXchg32U                  = 0x4e,
 
     Limit
 };
 
+// Opcodes from Bulk Memory Operations proposal as at 2 Feb 2018.  Note,
+// the opcodes are not actually assigned in that proposal.  This is just
+// an interim assignment.
+enum class CopyOrFillOp
+{
+    Copy                                 = 0x01,
+    Fill                                 = 0x02,
+
+    Limit
+};
+
 enum class MozOp
 {
     // ------------------------------------------------------------------------
     // These operators are emitted internally when compiling asm.js and are
     // rejected by wasm validation.  They are prefixed by MozPrefix.
 
     // asm.js-specific operators.  They start at 1 so as to check for
     // uninitialized (zeroed) storage.
--- a/js/src/wasm/WasmBinaryToAST.cpp
+++ b/js/src/wasm/WasmBinaryToAST.cpp
@@ -1244,16 +1244,60 @@ AstDecodeWake(AstDecodeContext& c)
         return false;
 
     if (!c.push(AstDecodeStackItem(wake)))
         return false;
 
     return true;
 }
 
+#ifdef ENABLE_WASM_BULKMEM_OPS
+static bool
+AstDecodeMemCopy(AstDecodeContext& c)
+{
+    if (!c.iter().readMemCopy(ValType::I32, nullptr, nullptr, nullptr))
+        return false;
+
+    AstDecodeStackItem dest = c.popCopy();
+    AstDecodeStackItem src  = c.popCopy();
+    AstDecodeStackItem len  = c.popCopy();
+
+    AstMemCopy* mc = new(c.lifo) AstMemCopy(dest.expr, src.expr, len.expr);
+
+    if (!mc)
+        return false;
+
+    if (!c.push(AstDecodeStackItem(mc)))
+        return false;
+
+    return true;
+}
+
+static bool
+AstDecodeMemFill(AstDecodeContext& c)
+{
+    if (!c.iter().readMemFill(ValType::I32, nullptr, nullptr, nullptr))
+        return false;
+
+    AstDecodeStackItem len   = c.popCopy();
+    AstDecodeStackItem val   = c.popCopy();
+    AstDecodeStackItem start = c.popCopy();
+
+    AstMemFill* mf = new(c.lifo) AstMemFill(start.expr, val.expr, len.expr);
+
+    if (!mf)
+        return false;
+
+    if (!c.push(AstDecodeStackItem(mf)))
+        return false;
+
+    return true;
+}
+#endif
+
 static bool
 AstDecodeExpr(AstDecodeContext& c)
 {
     uint32_t exprOffset = c.iter().currentOffset();
     OpBytes op;
     if (!c.iter().readOp(&op))
         return false;
 
@@ -1663,16 +1707,32 @@ AstDecodeExpr(AstDecodeContext& c)
         if (!c.iter().readUnreachable())
             return false;
         tmp = new(c.lifo) AstUnreachable();
         if (!tmp)
             return false;
         if (!c.push(AstDecodeStackItem(tmp)))
             return false;
         break;
+#ifdef ENABLE_WASM_BULKMEM_OPS
+      case uint16_t(Op::CopyOrFillPrefix):
+        switch (op.b1) {
+          case uint16_t(CopyOrFillOp::Copy):
+            if (!AstDecodeMemCopy(c))
+                return false;
+            break;
+          case uint16_t(CopyOrFillOp::Fill):
+            if (!AstDecodeMemFill(c))
+                return false;
+            break;
+          default:
+            return c.iter().unrecognizedOpcode(&op);
+        }
+        break;
+#endif
 #ifdef ENABLE_WASM_SATURATING_TRUNC_OPS
       case uint16_t(Op::NumericPrefix):
         switch (op.b1) {
           case uint16_t(NumericOp::I32TruncSSatF32):
           case uint16_t(NumericOp::I32TruncUSatF32):
             if (!AstDecodeExtraConversion(c, ValType::F32, ValType::I32, NumericOp(op.b1)))
                 return false;
             break;
--- a/js/src/wasm/WasmBinaryToText.cpp
+++ b/js/src/wasm/WasmBinaryToText.cpp
@@ -1272,16 +1272,56 @@ RenderWake(WasmRenderContext& c, AstWake
         return false;
 
     if (!c.buffer.append("atomic.wake", strlen("atomic.wake")))
         return false;
 
     return RenderLoadStoreAddress(c, wake.address(), 0);
 }
 
+#ifdef ENABLE_WASM_BULKMEM_OPS
+static bool
+RenderMemCopy(WasmRenderContext& c, AstMemCopy& mc)
+{
+    if (!RenderExpr(c, mc.dest()))
+        return false;
+    if (!RenderExpr(c, mc.src()))
+        return false;
+    if (!RenderExpr(c, mc.len()))
+        return false;
+
+    if (!RenderIndent(c))
+        return false;
+
+    MAP_AST_EXPR(c, mc);
+    const char* opStr = "memory.copy";
+
+    return c.buffer.append(opStr, strlen(opStr));
+}
+
+static bool
+RenderMemFill(WasmRenderContext& c, AstMemFill& mf)
+{
+    if (!RenderExpr(c, mf.start()))
+        return false;
+    if (!RenderExpr(c, mf.val()))
+        return false;
+    if (!RenderExpr(c, mf.len()))
+        return false;
+
+    if (!RenderIndent(c))
+        return false;
+
+    MAP_AST_EXPR(c, mf);
+    const char* opStr = "memory.fill";
+
+    return c.buffer.append(opStr, strlen(opStr));
+}
+#endif
+
 static bool
 RenderExpr(WasmRenderContext& c, AstExpr& expr, bool newLine /* = true */)
 {
     switch (expr.kind()) {
       case AstExprKind::Drop:
         if (!RenderDrop(c, expr.as<AstDrop>()))
             return false;
         break;
@@ -1411,16 +1451,26 @@ RenderExpr(WasmRenderContext& c, AstExpr
       case AstExprKind::Wait:
         if (!RenderWait(c, expr.as<AstWait>()))
             return false;
         break;
       case AstExprKind::Wake:
         if (!RenderWake(c, expr.as<AstWake>()))
             return false;
         break;
+#ifdef ENABLE_WASM_BULKMEM_OPS
+      case AstExprKind::MemCopy:
+        if (!RenderMemCopy(c, expr.as<AstMemCopy>()))
+            return false;
+        break;
+      case AstExprKind::MemFill:
+        if (!RenderMemFill(c, expr.as<AstMemFill>()))
+            return false;
+        break;
+#endif
       default:
         MOZ_CRASH("Bad AstExprKind");
     }
 
     return !newLine || c.buffer.append("\n");
 }
 
 static bool
--- a/js/src/wasm/WasmBuiltins.cpp
+++ b/js/src/wasm/WasmBuiltins.cpp
@@ -662,16 +662,22 @@ AddressOf(SymbolicAddress imm, ABIFuncti
         *abiType = Args_Int_GeneralGeneralGeneralInt64;
         return FuncCast(Instance::wait_i32, *abiType);
       case SymbolicAddress::WaitI64:
         *abiType = Args_Int_GeneralGeneralInt64Int64;
         return FuncCast(Instance::wait_i64, *abiType);
       case SymbolicAddress::Wake:
         *abiType = Args_General3;
         return FuncCast(Instance::wake, *abiType);
+      case SymbolicAddress::MemCopy:
+        *abiType = Args_General4;
+        return FuncCast(Instance::memCopy, *abiType);
+      case SymbolicAddress::MemFill:
+        *abiType = Args_General4;
+        return FuncCast(Instance::memFill, *abiType);
 #if defined(JS_CODEGEN_MIPS32)
       case SymbolicAddress::js_jit_gAtomic64Lock:
         return &js::jit::gAtomic64Lock;
 #endif
       case SymbolicAddress::Limit:
         break;
     }
 
@@ -738,16 +744,18 @@ wasm::NeedsBuiltinThunk(SymbolicAddress 
       case SymbolicAddress::ATan2D:
       case SymbolicAddress::GrowMemory:
       case SymbolicAddress::CurrentMemory:
       case SymbolicAddress::WaitI32:
       case SymbolicAddress::WaitI64:
       case SymbolicAddress::Wake:
       case SymbolicAddress::CoerceInPlace_JitEntry:
       case SymbolicAddress::ReportInt64JSCall:
+      case SymbolicAddress::MemCopy:
+      case SymbolicAddress::MemFill:
         return true;
       case SymbolicAddress::Limit:
         break;
     }
 
     MOZ_CRASH("unexpected symbolic address");
 }
 
--- a/js/src/wasm/WasmFrameIter.cpp
+++ b/js/src/wasm/WasmFrameIter.cpp
@@ -1223,16 +1223,20 @@ ThunkedNativeToDescription(SymbolicAddre
       case SymbolicAddress::WaitI64:
         return "call to native i64.wait (in wasm)";
       case SymbolicAddress::Wake:
         return "call to native wake (in wasm)";
       case SymbolicAddress::CoerceInPlace_JitEntry:
         return "out-of-line coercion for jit entry arguments (in wasm)";
       case SymbolicAddress::ReportInt64JSCall:
         return "jit call to int64 wasm function";
+      case SymbolicAddress::MemCopy:
+        return "call to native memory.copy function";
+      case SymbolicAddress::MemFill:
+        return "call to native memory.fill function";
 #if defined(JS_CODEGEN_MIPS32)
       case SymbolicAddress::js_jit_gAtomic64Lock:
         MOZ_CRASH();
 #endif
       case SymbolicAddress::Limit:
         break;
     }
     return "?";
--- a/js/src/wasm/WasmInstance.cpp
+++ b/js/src/wasm/WasmInstance.cpp
@@ -389,16 +389,96 @@ Instance::wake(Instance* instance, uint3
     if (woken > INT32_MAX) {
         JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_WASM_WAKE_OVERFLOW);
         return -1;
     }
 
     return int32_t(woken);
 }
 
+/* static */ int32_t
+Instance::memCopy(Instance* instance, uint32_t destByteOffset, uint32_t srcByteOffset, uint32_t len)
+{
+    WasmMemoryObject* mem = instance->memory();
+    uint32_t memLen = mem->volatileMemoryLength();
+
+    // Knowing that len > 0 below simplifies the wraparound checks.
+    if (len == 0) {
+
+        // Even though the length is zero, we must check for a valid offset.
+        if (destByteOffset < memLen && srcByteOffset < memLen)
+            return 0;
+
+        // else fall through to failure case
+
+    } else {
+
+        ArrayBufferObjectMaybeShared& arrBuf = mem->buffer();
+        uint8_t* rawBuf = arrBuf.dataPointerEither().unwrap();
+
+        // Here, we know that |len - 1| cannot underflow.
+        typedef CheckedInt<uint32_t> CheckedU32;
+        CheckedU32 highest_destOffset = CheckedU32(destByteOffset) + CheckedU32(len - 1);
+        CheckedU32 highest_srcOffset = CheckedU32(srcByteOffset) + CheckedU32(len - 1);
+
+        if (highest_destOffset.isValid()   &&   // wraparound check
+            highest_srcOffset.isValid()    &&   // wraparound check
+            destByteOffset + len <= memLen &&   // range check
+            srcByteOffset + len <= memLen)      // range check
+        {
+            memmove(rawBuf + destByteOffset, rawBuf + srcByteOffset, size_t(len));
+            return 0;
+        }
+        // else fall through to failure case
+    }
+
+    JSContext* cx = TlsContext.get();
+    JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_WASM_OUT_OF_BOUNDS);
+    return -1;
+}
+
+/* static */ int32_t
+Instance::memFill(Instance* instance, uint32_t byteOffset, uint32_t value, uint32_t len)
+{
+    WasmMemoryObject* mem = instance->memory();
+    uint32_t memLen = mem->volatileMemoryLength();
+
+    // Knowing that len > 0 below simplifies the wraparound check.
+    if (len == 0) {
+
+        // Even though the length is zero, we must check for a valid offset.
+        if (byteOffset < memLen)
+            return 0;
+
+        // else fall through to failure case
+
+    } else {
+
+        ArrayBufferObjectMaybeShared& arrBuf = mem->buffer();
+        uint8_t* rawBuf = arrBuf.dataPointerEither().unwrap();
+
+        // Here, we know that |len - 1| cannot underflow.
+        typedef CheckedInt<uint32_t> CheckedU32;
+        CheckedU32 highest_offset = CheckedU32(byteOffset) + CheckedU32(len - 1);
+
+        if (highest_offset.isValid() &&     // wraparound check
+            byteOffset + len <= memLen)     // range check
+        {
+            memset(rawBuf + byteOffset, int(value), size_t(len));
+            return 0;
+        }
+        // else fall through to failure case
+
+    }
+
+    JSContext* cx = TlsContext.get();
+    JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_WASM_OUT_OF_BOUNDS);
+    return -1;
+}
+
 Instance::Instance(JSContext* cx,
                    Handle<WasmInstanceObject*> object,
                    SharedCode code,
                    UniqueDebugState debug,
                    UniqueTlsData tlsDataIn,
                    HandleWasmMemoryObject memory,
                    SharedTableVector&& tables,
                    Handle<FunctionVector> funcImports,
--- a/js/src/wasm/WasmInstance.h
+++ b/js/src/wasm/WasmInstance.h
@@ -165,16 +165,18 @@ class Instance
     static int32_t callImport_i64(Instance*, int32_t, int32_t, uint64_t*);
     static int32_t callImport_f64(Instance*, int32_t, int32_t, uint64_t*);
     static int32_t callImport_ref(Instance*, int32_t, int32_t, uint64_t*);
     static uint32_t growMemory_i32(Instance* instance, uint32_t delta);
     static uint32_t currentMemory_i32(Instance* instance);
     static int32_t wait_i32(Instance* instance, uint32_t byteOffset, int32_t value, int64_t timeout);
     static int32_t wait_i64(Instance* instance, uint32_t byteOffset, int64_t value, int64_t timeout);
     static int32_t wake(Instance* instance, uint32_t byteOffset, int32_t count);
+    static int32_t memCopy(Instance* instance, uint32_t destByteOffset, uint32_t srcByteOffset, uint32_t len);
+    static int32_t memFill(Instance* instance, uint32_t byteOffset, uint32_t value, uint32_t len);
 };
 
 typedef UniquePtr<Instance> UniqueInstance;
 
 } // namespace wasm
 } // namespace js
 
 #endif // wasm_instance_h
--- a/js/src/wasm/WasmIonCompile.cpp
+++ b/js/src/wasm/WasmIonCompile.cpp
@@ -857,17 +857,17 @@ class FunctionCompiler
         if (!access->offset())
             return base;
         auto* ins = MWasmAddOffset::New(alloc(), base, access->offset(), bytecodeOffset());
         curBlock_->add(ins);
         access->clearOffset();
         return ins;
     }
 
-    bool checkWaitWakeResult(MDefinition* value) {
+    bool checkI32NegativeMeansFailedResult(MDefinition* value) {
         if (inDeadCode())
             return true;
 
         auto* zero = constant(Int32Value(0), MIRType::Int32);
         auto* cond = compare(value, zero, JSOP_LT, MCompare::Compare_Int32);
 
         MBasicBlock* failBlock;
         if (!newBlock(curBlock_, &failBlock))
@@ -3524,17 +3524,17 @@ EmitWait(FunctionCompiler& f, ValType ty
     if (!f.finishCall(&args))
         return false;
 
     SymbolicAddress callee = type == ValType::I32 ? SymbolicAddress::WaitI32 : SymbolicAddress::WaitI64;
     MDefinition* ret;
     if (!f.builtinInstanceMethodCall(callee, args, ValType::I32, &ret))
         return false;
 
-    if (!f.checkWaitWakeResult(ret))
+    if (!f.checkI32NegativeMeansFailedResult(ret))
         return false;
 
     f.iter().setResult(ret);
     return true;
 }
 
 static bool
 EmitWake(FunctionCompiler& f)
@@ -3566,17 +3566,17 @@ EmitWake(FunctionCompiler& f)
 
     if (!f.finishCall(&args))
         return false;
 
     MDefinition* ret;
     if (!f.builtinInstanceMethodCall(SymbolicAddress::Wake, args, ValType::I32, &ret))
         return false;
 
-    if (!f.checkWaitWakeResult(ret))
+    if (!f.checkI32NegativeMeansFailedResult(ret))
         return false;
 
     f.iter().setResult(ret);
     return true;
 }
 
 static bool
 EmitAtomicXchg(FunctionCompiler& f, ValType type, Scalar::Type viewType)
@@ -3593,16 +3593,96 @@ EmitAtomicXchg(FunctionCompiler& f, ValT
         return false;
 
     f.iter().setResult(ins);
     return true;
 }
 
 #endif // ENABLE_WASM_THREAD_OPS
 
+#ifdef ENABLE_WASM_BULKMEM_OPS
+static bool
+EmitMemCopy(FunctionCompiler& f)
+{
+    MDefinition *dest, *src, *len;
+    if (!f.iter().readMemCopy(ValType::I32, &dest, &src, &len))
+        return false;
+
+    if (f.inDeadCode())
+        return false;
+
+    uint32_t lineOrBytecode = f.readCallSiteLineOrBytecode();
+
+    CallCompileState args(f, lineOrBytecode);
+    if (!f.startCall(&args))
+        return false;
+
+    if (!f.passInstance(&args))
+        return false;
+
+    if (!f.passArg(dest, ValType::I32, &args))
+        return false;
+    if (!f.passArg(src, ValType::I32, &args))
+        return false;
+    if (!f.passArg(len, ValType::I32, &args))
+        return false;
+
+    if (!f.finishCall(&args))
+        return false;
+
+    MDefinition* ret;
+    if (!f.builtinInstanceMethodCall(SymbolicAddress::MemCopy, args, ValType::I32, &ret))
+        return false;
+
+    if (!f.checkI32NegativeMeansFailedResult(ret))
+        return false;
+
+    return true;
+}
+
+static bool
+EmitMemFill(FunctionCompiler& f)
+{
+    MDefinition *start, *val, *len;
+    if (!f.iter().readMemFill(ValType::I32, &start, &val, &len))
+        return false;
+
+    if (f.inDeadCode())
+        return false;
+
+    uint32_t lineOrBytecode = f.readCallSiteLineOrBytecode();
+
+    CallCompileState args(f, lineOrBytecode);
+    if (!f.startCall(&args))
+        return false;
+
+    if (!f.passInstance(&args))
+        return false;
+
+    if (!f.passArg(start, ValType::I32, &args))
+        return false;
+    if (!f.passArg(val, ValType::I32, &args))
+        return false;
+    if (!f.passArg(len, ValType::I32, &args))
+        return false;
+
+    if (!f.finishCall(&args))
+        return false;
+
+    MDefinition* ret;
+    if (!f.builtinInstanceMethodCall(SymbolicAddress::MemFill, args, ValType::I32, &ret))
+        return false;
+
+    if (!f.checkI32NegativeMeansFailedResult(ret))
+        return false;
+
+    return true;
+}
+#endif // ENABLE_WASM_BULKMEM_OPS
+
 static bool
 EmitBodyExprs(FunctionCompiler& f)
 {
     if (!f.iter().readFunctionStart(f.sig().ret()))
         return false;
 
 #define CHECK(c)                                                              \
     if (!(c))                                                                 \
@@ -3992,16 +4072,31 @@ EmitBodyExprs(FunctionCompiler& f)
           case uint16_t(Op::I64Extend8S):
             CHECK(EmitSignExtend(f, 1, 8));
           case uint16_t(Op::I64Extend16S):
             CHECK(EmitSignExtend(f, 2, 8));
           case uint16_t(Op::I64Extend32S):
             CHECK(EmitSignExtend(f, 4, 8));
 #endif
 
+          // Bulk memory operations
+#ifdef ENABLE_WASM_BULKMEM_OPS
+          case uint16_t(Op::CopyOrFillPrefix): {
+            switch (op.b1) {
+              case uint16_t(CopyOrFillOp::Copy):
+                CHECK(EmitMemCopy(f));
+              case uint16_t(CopyOrFillOp::Fill):
+                CHECK(EmitMemFill(f));
+              default:
+                return f.iter().unrecognizedOpcode(&op);
+            }
+            break;
+          }
+#endif
+
           // Numeric operations
           case uint16_t(Op::NumericPrefix): {
 #ifdef ENABLE_WASM_SATURATING_TRUNC_OPS
             switch (op.b1) {
               case uint16_t(NumericOp::I32TruncSSatF32):
               case uint16_t(NumericOp::I32TruncUSatF32):
                 CHECK(EmitTruncate(f, ValType::F32, ValType::I32,
                                    NumericOp(op.b1) == NumericOp::I32TruncUSatF32, true));
--- a/js/src/wasm/WasmOpIter.cpp
+++ b/js/src/wasm/WasmOpIter.cpp
@@ -236,16 +236,29 @@ wasm::Classify(OpBytes op)
       case Op::Else:
         return OpKind::Else;
       case Op::End:
         return OpKind::End;
       case Op::CurrentMemory:
         return OpKind::CurrentMemory;
       case Op::GrowMemory:
         return OpKind::GrowMemory;
+      case Op::CopyOrFillPrefix: {
+#ifdef ENABLE_WASM_BULKMEM_OPS
+          switch (CopyOrFillOp(op.b1)) {
+            case CopyOrFillOp::Copy:
+              return OpKind::MemCopy;
+            case CopyOrFillOp::Fill:
+              return OpKind::MemFill;
+            default:
+              break;
+          }
+#endif
+          break;
+      }
       case Op::RefNull:
         return OpKind::RefNull;
       case Op::NumericPrefix: {
 #ifdef ENABLE_WASM_SATURATING_TRUNC_OPS
           switch (NumericOp(op.b1)) {
             case NumericOp::I32TruncSSatF32:
             case NumericOp::I32TruncUSatF32:
             case NumericOp::I32TruncSSatF64:
--- a/js/src/wasm/WasmOpIter.h
+++ b/js/src/wasm/WasmOpIter.h
@@ -213,16 +213,18 @@ enum class OpKind {
     Swizzle,
     Shuffle,
     Splat,
     SimdSelect,
     SimdCtor,
     SimdBooleanReduction,
     SimdShiftByScalar,
     SimdComparison,
+    MemCopy,
+    MemFill,
     RefNull,
 };
 
 // Return the OpKind for a given Op. This is used for sanity-checking that
 // API users use the correct read function for a given Op.
 OpKind
 Classify(OpBytes op);
 #endif
@@ -651,16 +653,18 @@ class MOZ_STACK_CLASS OpIter : private P
     MOZ_MUST_USE bool readSwizzle(ValType simdType, uint8_t (* lanes)[16], Value* vector);
     MOZ_MUST_USE bool readShuffle(ValType simdType, uint8_t (* lanes)[16],
                                   Value* lhs, Value* rhs);
     MOZ_MUST_USE bool readSimdSelect(ValType simdType, Value* trueValue,
                                      Value* falseValue,
                                      Value* condition);
     MOZ_MUST_USE bool readSimdCtor(ValType elementType, uint32_t numElements, ValType simdType,
                                    ValueVector* argValues);
+    MOZ_MUST_USE bool readMemCopy(ValType argType, Value* dest, Value* src, Value* len);
+    MOZ_MUST_USE bool readMemFill(ValType argType, Value* start, Value* val, Value* len);
 
     // At a location where readOp is allowed, peek at the next opcode
     // without consuming it or updating any internal state.
     // Never fails: returns uint16_t(Op::Limit) in op->b0 if it can't read.
     void peekOp(OpBytes* op);
 
     // ------------------------------------------------------------------------
     // Stack management.
@@ -2228,16 +2232,54 @@ OpIter<Policy>::readSimdCtor(ValType ele
             return false;
     }
 
     infalliblePush(simdType);
 
     return true;
 }
 
+template <typename Policy>
+inline bool
+OpIter<Policy>::readMemCopy(ValType argType,
+                            Value* dest, Value* src, Value* len)
+{
+    MOZ_ASSERT(Classify(op_) == OpKind::MemCopy);
+
+    if (!popWithType(argType, len))
+        return false;
+
+    if (!popWithType(argType, src))
+        return false;
+
+    if (!popWithType(argType, dest))
+        return false;
+
+    return true;
+}
+
+template <typename Policy>
+inline bool
+OpIter<Policy>::readMemFill(ValType argType,
+                            Value* start, Value* val, Value* len)
+{
+    MOZ_ASSERT(Classify(op_) == OpKind::MemFill);
+
+    if (!popWithType(argType, len))
+        return false;
+
+    if (!popWithType(argType, val))
+        return false;
+
+    if (!popWithType(argType, start))
+        return false;
+
+    return true;
+}
+
 } // namespace wasm
 } // namespace js
 
 namespace mozilla {
 
 // Specialize IsPod for the Nothing specializations.
 template<> struct IsPod<js::wasm::TypeAndValue<Nothing>> : TrueType {};
 template<> struct IsPod<js::wasm::ControlStackEntry<Nothing>> : TrueType {};
--- a/js/src/wasm/WasmTextToBinary.cpp
+++ b/js/src/wasm/WasmTextToBinary.cpp
@@ -103,16 +103,20 @@ class WasmToken
         If,
         Import,
         Index,
         Memory,
         NegativeZero,
         Load,
         Local,
         Loop,
+#ifdef ENABLE_WASM_BULKMEM_OPS
+        MemCopy,
+        MemFill,
+#endif
         Module,
         Mutable,
         Name,
         Nop,
         Offset,
         OpenParen,
         Param,
         RefNull,
@@ -326,16 +330,20 @@ class WasmToken
           case CurrentMemory:
           case Drop:
           case GetGlobal:
           case GetLocal:
           case GrowMemory:
           case If:
           case Load:
           case Loop:
+#ifdef ENABLE_WASM_BULKMEM_OPS
+          case MemCopy:
+          case MemFill:
+#endif
           case Nop:
           case RefNull:
           case Return:
           case SetGlobal:
           case SetLocal:
           case Store:
           case TeeLocal:
           case TernaryOpcode:
@@ -1634,16 +1642,25 @@ WasmTokenStream::next()
       case 'l':
         if (consume(u"local"))
             return WasmToken(WasmToken::Local, begin, cur_);
         if (consume(u"loop"))
             return WasmToken(WasmToken::Loop, begin, cur_);
         break;
 
       case 'm':
+#ifdef ENABLE_WASM_BULKMEM_OPS
+        if (consume(u"memory.")) {
+            if (consume(u"copy"))
+                return WasmToken(WasmToken::MemCopy, begin, cur_);
+            if (consume(u"fill"))
+                return WasmToken(WasmToken::MemFill, begin, cur_);
+            break;
+        }
+#endif
         if (consume(u"module"))
             return WasmToken(WasmToken::Module, begin, cur_);
         if (consume(u"memory"))
             return WasmToken(WasmToken::Memory, begin, cur_);
         if (consume(u"mut"))
             return WasmToken(WasmToken::Mutable, begin, cur_);
         break;
 
@@ -2941,16 +2958,54 @@ ParseGrowMemory(WasmParseContext& c, boo
 {
     AstExpr* operand = ParseExpr(c, inParens);
     if (!operand)
         return nullptr;
 
     return new(c.lifo) AstGrowMemory(operand);
 }
 
+#ifdef ENABLE_WASM_BULKMEM_OPS
+static AstMemCopy*
+ParseMemCopy(WasmParseContext& c, bool inParens)
+{
+    AstExpr* dest = ParseExpr(c, inParens);
+    if (!dest)
+        return nullptr;
+
+    AstExpr* src = ParseExpr(c, inParens);
+    if (!src)
+        return nullptr;
+
+    AstExpr* len = ParseExpr(c, inParens);
+    if (!len)
+        return nullptr;
+
+    return new(c.lifo) AstMemCopy(dest, src, len);
+}
+
+static AstMemFill*
+ParseMemFill(WasmParseContext& c, bool inParens)
+{
+    AstExpr* start = ParseExpr(c, inParens);
+    if (!start)
+        return nullptr;
+
+    AstExpr* val = ParseExpr(c, inParens);
+    if (!val)
+        return nullptr;
+
+    AstExpr* len = ParseExpr(c, inParens);
+    if (!len)
+        return nullptr;
+
+    return new(c.lifo) AstMemFill(start, val, len);
+}
+#endif
+
 static AstExpr*
 ParseRefNull(WasmParseContext& c)
 {
     WasmToken token;
     if (!c.ts.match(WasmToken::ValueType, &token, c.error))
         return nullptr;
     if (token.valueType() != ValType::AnyRef) {
         c.ts.generateError(token, "only anyref is supported for nullref", c.error);
@@ -3030,16 +3085,22 @@ ParseExprBody(WasmParseContext& c, WasmT
       case WasmToken::UnaryOpcode:
         return ParseUnaryOperator(c, token.op(), inParens);
       case WasmToken::Nop:
         return new(c.lifo) AstNop();
       case WasmToken::CurrentMemory:
         return new(c.lifo) AstCurrentMemory();
       case WasmToken::GrowMemory:
         return ParseGrowMemory(c, inParens);
+#ifdef ENABLE_WASM_BULKMEM_OPS
+      case WasmToken::MemCopy:
+        return ParseMemCopy(c, inParens);
+      case WasmToken::MemFill:
+        return ParseMemFill(c, inParens);
+#endif
       case WasmToken::RefNull:
         return ParseRefNull(c);
       default:
         c.ts.generateError(token, c.error);
         return nullptr;
     }
 }
 
@@ -4341,16 +4402,34 @@ ResolveWait(Resolver& r, AstWait& s)
 
 static bool
 ResolveWake(Resolver& r, AstWake& s)
 {
     return ResolveLoadStoreAddress(r, s.address()) &&
            ResolveExpr(r, s.count());
 }
 
+#ifdef ENABLE_WASM_BULKMEM_OPS
+static bool
+ResolveMemCopy(Resolver& r, AstMemCopy& s)
+{
+    return ResolveExpr(r, s.dest()) &&
+           ResolveExpr(r, s.src()) &&
+           ResolveExpr(r, s.len());
+}
+
+static bool
+ResolveMemFill(Resolver& r, AstMemFill& s)
+{
+    return ResolveExpr(r, s.start()) &&
+           ResolveExpr(r, s.val()) &&
+           ResolveExpr(r, s.len());
+}
+#endif
+
 static bool
 ResolveExpr(Resolver& r, AstExpr& expr)
 {
     switch (expr.kind()) {
       case AstExprKind::Nop:
       case AstExprKind::Pop:
       case AstExprKind::Unreachable:
       case AstExprKind::CurrentMemory:
@@ -4413,16 +4492,22 @@ ResolveExpr(Resolver& r, AstExpr& expr)
       case AstExprKind::AtomicRMW:
         return ResolveAtomicRMW(r, expr.as<AstAtomicRMW>());
       case AstExprKind::AtomicStore:
         return ResolveAtomicStore(r, expr.as<AstAtomicStore>());
       case AstExprKind::Wait:
         return ResolveWait(r, expr.as<AstWait>());
       case AstExprKind::Wake:
         return ResolveWake(r, expr.as<AstWake>());
+#ifdef ENABLE_WASM_BULKMEM_OPS
+    case AstExprKind::MemCopy:
+        return ResolveMemCopy(r, expr.as<AstMemCopy>());
+    case AstExprKind::MemFill:
+        return ResolveMemFill(r, expr.as<AstMemFill>());
+#endif
     }
     MOZ_CRASH("Bad expr kind");
 }
 
 static bool
 ResolveFunc(Resolver& r, AstFunc& func)
 {
     r.beginFunc();
@@ -4954,16 +5039,36 @@ static bool
 EncodeWake(Encoder& e, AstWake& s)
 {
     return EncodeLoadStoreAddress(e, s.address()) &&
            EncodeExpr(e, s.count()) &&
            e.writeOp(ThreadOp::Wake) &&
            EncodeLoadStoreFlags(e, s.address());
 }
 
+#ifdef ENABLE_WASM_BULKMEM_OPS
+static bool
+EncodeMemCopy(Encoder& e, AstMemCopy& s)
+{
+    return EncodeExpr(e, s.dest()) &&
+           EncodeExpr(e, s.src()) &&
+           EncodeExpr(e, s.len()) &&
+           e.writeOp(CopyOrFillOp::Copy);
+}
+
+static bool
+EncodeMemFill(Encoder& e, AstMemFill& s)
+{
+    return EncodeExpr(e, s.start()) &&
+           EncodeExpr(e, s.val()) &&
+           EncodeExpr(e, s.len()) &&
+           e.writeOp(CopyOrFillOp::Fill);
+}
+#endif
+
 static bool
 EncodeRefNull(Encoder& e, AstRefNull& s)
 {
     return e.writeOp(Op::RefNull) &&
            e.writeValType(s.refType());
 }
 
 static bool
@@ -5037,16 +5142,22 @@ EncodeExpr(Encoder& e, AstExpr& expr)
       case AstExprKind::AtomicRMW:
         return EncodeAtomicRMW(e, expr.as<AstAtomicRMW>());
       case AstExprKind::AtomicStore:
         return EncodeAtomicStore(e, expr.as<AstAtomicStore>());
       case AstExprKind::Wait:
         return EncodeWait(e, expr.as<AstWait>());
       case AstExprKind::Wake:
         return EncodeWake(e, expr.as<AstWake>());
+#ifdef ENABLE_WASM_BULKMEM_OPS
+      case AstExprKind::MemCopy:
+        return EncodeMemCopy(e, expr.as<AstMemCopy>());
+      case AstExprKind::MemFill:
+        return EncodeMemFill(e, expr.as<AstMemFill>());
+#endif
     }
     MOZ_CRASH("Bad expr kind");
 }
 
 /*****************************************************************************/
 // wasm AST binary serialization
 
 static bool
--- a/js/src/wasm/WasmTypes.h
+++ b/js/src/wasm/WasmTypes.h
@@ -1484,16 +1484,18 @@ enum class SymbolicAddress
     Uint64ToDouble,
     Int64ToFloat32,
     Int64ToDouble,
     GrowMemory,
     CurrentMemory,
     WaitI32,
     WaitI64,
     Wake,
+    MemCopy,
+    MemFill,
 #if defined(JS_CODEGEN_MIPS32)
     js_jit_gAtomic64Lock,
 #endif
     Limit
 };
 
 bool
 IsRoundingFunction(SymbolicAddress callee, jit::RoundingMode* mode);
--- a/js/src/wasm/WasmValidate.h
+++ b/js/src/wasm/WasmValidate.h
@@ -282,16 +282,22 @@ class Encoder
         return writeFixedU8(uint8_t(op));
     }
     MOZ_MUST_USE bool writeOp(MozOp op) {
         static_assert(size_t(MozOp::Limit) <= 256, "fits");
         MOZ_ASSERT(size_t(op) < size_t(MozOp::Limit));
         return writeFixedU8(uint8_t(Op::MozPrefix)) &&
                writeFixedU8(uint8_t(op));
     }
+    MOZ_MUST_USE bool writeOp(CopyOrFillOp op) {
+        static_assert(size_t(CopyOrFillOp::Limit) <= 256, "fits");
+        MOZ_ASSERT(size_t(op) < size_t(CopyOrFillOp::Limit));
+        return writeFixedU8(uint8_t(Op::CopyOrFillPrefix)) &&
+               writeFixedU8(uint8_t(op));
+    }
     MOZ_MUST_USE bool writeOp(NumericOp op) {
         static_assert(size_t(NumericOp::Limit) <= 256, "fits");
         MOZ_ASSERT(size_t(op) < size_t(NumericOp::Limit));
         return writeFixedU8(uint8_t(Op::NumericPrefix)) &&
                writeFixedU8(uint8_t(op));
     }
     MOZ_MUST_USE bool writeOp(ThreadOp op) {
         static_assert(size_t(ThreadOp::Limit) <= 256, "fits");
--- a/layout/base/tests/mochitest.ini
+++ b/layout/base/tests/mochitest.ini
@@ -3,16 +3,17 @@ support-files =
   Ahem.ttf
   file_bug465448.html
   file_bug842853.html
   file_bug842853.sjs
   selection-utils.js
   ../../../dom/plugins/test/mochitest/plugin-utils.js
 
 [test_after_paint_pref.html]
+skip-if = (os == 'win' && asan) # Bug 1459682
 [test_border_radius_hit_testing.html]
 support-files = border_radius_hit_testing_iframe.html
 [test_bug66619.html]
 [test_bug93077-1.html]
 [test_bug93077-2.html]
 [test_bug93077-3.html]
 [test_bug93077-4.html]
 [test_bug93077-5.html]
--- a/layout/reftests/reftest.list
+++ b/layout/reftests/reftest.list
@@ -188,36 +188,40 @@ include first-line/reftest.list
 include flexbox/reftest.list
 
 # CSS Grid (display: grid, display: inline-grid)
 include css-grid/reftest.list
 
 # floats/
 include floats/reftest.list
 
+###################################
+# These tests have been moved to reftest_fonts.list
+#
 # font-face
-include font-face/reftest.list
+#include font-face/reftest.list
 
 # font features (opentype)
-include font-features/reftest.list
+#include font-features/reftest.list
 
 # mobile font size inflation
-include font-inflation/reftest.list
+#include font-inflation/reftest.list
 
 # CSS Font Loading API
-include font-loading-api/reftest.list
+#include font-loading-api/reftest.list
 
 # font matching
-include font-matching/reftest.list
+#include font-matching/reftest.list
 
 # font variations
-include font-variations/reftest.list
+#include font-variations/reftest.list
 
 # forms
-include forms/reftest.list
+#include forms/reftest.list
+#######################################
 
 # frameset
 include frameset/reftest.list
 
 # gfx
 include ../../gfx/tests/reftest/reftest.list
 
 # block-inside-inline splits
@@ -340,36 +344,40 @@ include table-html/reftest.list
 
 include table-overflow/reftest.list
 
 # table-width/
 include table-width/reftest.list
 
 include ../tables/reftests/reftest.list
 
+##############################################
+# These tests have been moved to reftest_fonts.list
+#
 # text/
-include text/reftest.list
+#include text/reftest.list
 
 # text-stroke
-include text-stroke/reftest.list
+#include text-stroke/reftest.list
 
 # text-decoration/
-include text-decoration/reftest.list
+#include text-decoration/reftest.list
 
 # text-indent/
-include text-indent/reftest.list
+#include text-indent/reftest.list
 
 # text-shadow/
-include text-shadow/reftest.list
+#include text-shadow/reftest.list
 
 # text-svgglyphs/
-include text-svgglyphs/reftest.list
+#include text-svgglyphs/reftest.list
 
 # text-transform/
-include text-transform/reftest.list
+#include text-transform/reftest.list
+##############################################
 
 # theme (osx)
 include ../../toolkit/themes/osx/reftests/reftest.list
 
 include ../../toolkit/content/tests/reftests/reftest.list
 
 # -moz-transform/
 # skipping on non-e10s windows because of assertion in bug 1401228
new file mode 100644
--- /dev/null
+++ b/layout/reftests/reftest_fonts.list
@@ -0,0 +1,45 @@
+# font-face
+include font-face/reftest.list
+
+# font features (opentype)
+include font-features/reftest.list
+
+# mobile font size inflation
+include font-inflation/reftest.list
+
+# CSS Font Loading API
+include font-loading-api/reftest.list
+
+# font matching
+include font-matching/reftest.list
+
+# font variations
+include font-variations/reftest.list
+
+# from svg/reftest.list
+include svg/text/reftest.list
+
+# text/
+include text/reftest.list
+
+# text-stroke
+include text-stroke/reftest.list
+
+# text-decoration/
+include text-decoration/reftest.list
+
+# text-indent/
+include text-indent/reftest.list
+
+# text-shadow/
+include text-shadow/reftest.list
+
+# text-svgglyphs/
+include text-svgglyphs/reftest.list
+
+# text-transform/
+include text-transform/reftest.list
+
+# css writing mode
+include w3c-css/received/reftest_writing_modes.list
+
--- a/layout/reftests/svg/reftest.list
+++ b/layout/reftests/svg/reftest.list
@@ -8,18 +8,19 @@ include image/reftest.list
 include sizing/reftest.list
 
 # filter tests
 include filters/reftest.list
 
 # smil / animation tests
 include smil/reftest.list
 
+# These tests have been moved to reftest_fonts.list
 # text tests
-include text/reftest.list
+# include text/reftest.list
 
 # load only tests
 include load-only/reftest.list
 
 # Mozilla only tests (i.e. those containing XUL/XBL/etc.)
 include moz-only/reftest.list
 
 # svg-integration tests (using svg effects in e.g. HTML)
--- a/layout/reftests/w3c-css/received/reftest.list
+++ b/layout/reftests/w3c-css/received/reftest.list
@@ -237,937 +237,16 @@ skip == css-values/lh-unit-002.html refe
 == css-values/vh-interpolate-vh.html css-values/reference/all-green.html
 == css-values/vh-support-atviewport.html css-values/reference/all-green.html
 == css-values/vh-support-margin.html css-values/reference/all-green.html
 skip == css-values/vh-support-transform-origin.html css-values/reference/all-green.html
 skip == css-values/vh-support-transform-translate.html css-values/reference/all-green.html
 == css-values/vh-support.html css-values/reference/all-green.html
 == css-values/vh-zero-support.html css-values/reference/all-green.html
 skip == css-values/vh_not_refreshing_on_chrome.html css-values/reference/vh_not_refreshing_on_chrome-ref.html
-== css-writing-modes/abs-pos-non-replaced-icb-vlr-003.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vlr-005.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-004-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vlr-007.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vlr-009.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vlr-011.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vlr-013.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-004-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vlr-015.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vlr-017.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vlr-019.xht reference/ref-filled-green-100px-square.xht
-skip == css-writing-modes/abs-pos-non-replaced-icb-vlr-021.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vlr-023.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vlr-025.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vlr-027.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vlr-029.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vlr-031.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vlr-033.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vrl-002.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vrl-004.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-004-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vrl-006.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vrl-008.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vrl-010.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vrl-012.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-004-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vrl-014.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vrl-016.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vrl-018.xht reference/ref-filled-green-100px-square.xht
-skip == css-writing-modes/abs-pos-non-replaced-icb-vrl-020.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vrl-022.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vrl-024.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vrl-026.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vrl-028.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vrl-030.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/abs-pos-non-replaced-icb-vrl-032.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-003.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-005.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-007.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-009.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-011.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-013.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-015.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-017.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-019.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-021.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-023.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-025.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-027.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-029.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-031.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-033.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-035.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-037.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-039.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-041.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-043.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-045.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-047.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-049.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-051.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-053.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-055.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-057.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-059.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-061.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-063.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-065.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-067.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-069.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-071.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-073.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-075.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-077.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-079.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-081.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-083.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-085.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-087.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-089.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-091.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-093.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-095.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-097.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-103.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-105.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-107.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-109.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-111.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-113.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-115.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-117.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-119.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-121.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-123.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-125.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-127.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-129.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-131.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-133.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-135.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-137.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-139.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-141.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-143.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-145.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-147.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-149.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-151.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-153.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-155.xht css-writing-modes/abs-pos-non-replaced-vlr-155-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-157.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-159.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-161.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-163.xht css-writing-modes/abs-pos-non-replaced-vlr-163-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-165.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-167.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-169.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-171.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-173.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-175.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-177.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-179.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-181.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-183.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-185.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-187.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-189.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-191.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-193.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-195.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-197.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-199.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-201.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-203.xht css-writing-modes/abs-pos-non-replaced-vlr-155-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-205.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-207.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-209.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-211.xht css-writing-modes/abs-pos-non-replaced-vlr-163-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-213.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-215.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-217.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-219.xht css-writing-modes/abs-pos-non-replaced-vlr-155-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-221.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-223.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-225.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-227.xht css-writing-modes/abs-pos-non-replaced-vlr-163-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-229.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-002.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-004.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-006.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-008.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-010.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-012.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-014.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-016.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-018.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-020.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-022.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-024.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-026.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-028.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-030.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-032.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-034.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-036.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-038.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-040.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-042.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-044.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-046.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-048.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-050.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-052.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-054.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-056.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-058.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-060.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-062.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-064.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-066.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-068.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-070.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-072.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-074.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-076.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-078.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-080.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-082.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-084.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-086.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-088.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-090.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-092.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-094.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-096.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-102.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-104.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-106.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-108.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-110.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-112.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-114.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-116.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-118.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-120.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-122.xht css-writing-modes/abs-pos-non-replaced-vrl-122-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-124.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-126.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-128.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-130.xht css-writing-modes/abs-pos-non-replaced-vrl-130-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-132.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-134.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-136.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-138.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-140.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-142.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-144.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-146.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-148.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-150.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-152.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-154.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-156.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-158.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-160.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-162.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-164.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-166.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-168.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-170.xht css-writing-modes/abs-pos-non-replaced-vrl-122-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-172.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-174.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-176.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-178.xht css-writing-modes/abs-pos-non-replaced-vrl-130-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-180.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-182.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-184.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-186.xht css-writing-modes/abs-pos-non-replaced-vrl-122-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-188.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-190.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-192.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-194.xht css-writing-modes/abs-pos-non-replaced-vrl-130-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-196.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-198.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-200.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-202.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-204.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-206.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-208.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-210.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-212.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-214.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-216.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-218.xht css-writing-modes/abs-pos-non-replaced-vrl-122-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-220.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-222.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-224.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-226.xht css-writing-modes/abs-pos-non-replaced-vrl-130-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-228.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-== css-writing-modes/background-position-vrl-018.xht css-writing-modes/background-position-vrl-018-ref.xht
-== css-writing-modes/background-position-vrl-020.xht css-writing-modes/background-position-vrl-018-ref.xht
-== css-writing-modes/background-position-vrl-022.xht css-writing-modes/background-position-vrl-018-ref.xht
-== css-writing-modes/background-size-document-root-vrl-002.html css-writing-modes/background-size-document-root-vrl-002-ref.xht
-== css-writing-modes/background-size-document-root-vrl-004.html css-writing-modes/background-size-document-root-vrl-002-ref.xht
-== css-writing-modes/background-size-document-root-vrl-006.html css-writing-modes/background-size-document-root-vrl-002-ref.xht
-== css-writing-modes/background-size-document-root-vrl-008.html css-writing-modes/background-size-document-root-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,93,600) == css-writing-modes/baseline-inline-non-replaced-002.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,600) == css-writing-modes/baseline-inline-non-replaced-003.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,600) == css-writing-modes/baseline-inline-non-replaced-004.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,600) == css-writing-modes/baseline-inline-non-replaced-005.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/baseline-inline-replaced-002.xht css-writing-modes/baseline-inline-replaced-002-ref.xht
-== css-writing-modes/baseline-inline-replaced-003.xht css-writing-modes/baseline-inline-replaced-002-ref.xht
-== css-writing-modes/bidi-embed-001.html css-writing-modes/reference/bidi-embed-001.html
-== css-writing-modes/bidi-embed-002.html css-writing-modes/reference/bidi-embed-002.html
-== css-writing-modes/bidi-embed-003.html css-writing-modes/reference/bidi-embed-003.html
-== css-writing-modes/bidi-embed-004.html css-writing-modes/reference/bidi-embed-004.html
-== css-writing-modes/bidi-embed-005.html css-writing-modes/reference/bidi-embed-005.html
-== css-writing-modes/bidi-embed-006.html css-writing-modes/reference/bidi-embed-006.html
-== css-writing-modes/bidi-embed-007.html css-writing-modes/reference/bidi-embed-007.html
-== css-writing-modes/bidi-embed-008.html css-writing-modes/reference/bidi-embed-008.html
-== css-writing-modes/bidi-embed-009.html css-writing-modes/reference/bidi-embed-009.html
-== css-writing-modes/bidi-embed-010.html css-writing-modes/reference/bidi-embed-010.html
-== css-writing-modes/bidi-embed-011.html css-writing-modes/reference/bidi-embed-011.html
-== css-writing-modes/bidi-isolate-001.html css-writing-modes/reference/bidi-isolate-001.html
-== css-writing-modes/bidi-isolate-002.html css-writing-modes/reference/bidi-isolate-002.html
-== css-writing-modes/bidi-isolate-003.html css-writing-modes/reference/bidi-isolate-003.html
-== css-writing-modes/bidi-isolate-004.html css-writing-modes/reference/bidi-isolate-004.html
-== css-writing-modes/bidi-isolate-005.html css-writing-modes/reference/bidi-isolate-005.html
-== css-writing-modes/bidi-isolate-006.html css-writing-modes/reference/bidi-isolate-006.html
-== css-writing-modes/bidi-isolate-007.html css-writing-modes/reference/bidi-isolate-007.html
-== css-writing-modes/bidi-isolate-008.html css-writing-modes/reference/bidi-isolate-008.html
-== css-writing-modes/bidi-isolate-009.html css-writing-modes/reference/bidi-isolate-009.html
-== css-writing-modes/bidi-isolate-010.html css-writing-modes/reference/bidi-isolate-010.html
-== css-writing-modes/bidi-isolate-011.html css-writing-modes/reference/bidi-embed-011.html
-== css-writing-modes/bidi-isolate-override-001.html css-writing-modes/reference/bidi-isolate-override-001.html
-== css-writing-modes/bidi-isolate-override-002.html css-writing-modes/reference/bidi-isolate-override-002.html
-== css-writing-modes/bidi-isolate-override-003.html css-writing-modes/reference/bidi-isolate-override-003.html
-== css-writing-modes/bidi-isolate-override-004.html css-writing-modes/reference/bidi-isolate-override-004.html
-== css-writing-modes/bidi-isolate-override-005.html css-writing-modes/reference/bidi-isolate-override-005.html
-== css-writing-modes/bidi-isolate-override-006.html css-writing-modes/reference/bidi-isolate-override-006.html
-== css-writing-modes/bidi-isolate-override-007.html css-writing-modes/reference/bidi-isolate-override-007.html
-== css-writing-modes/bidi-isolate-override-008.html css-writing-modes/reference/bidi-isolate-override-008.html
-== css-writing-modes/bidi-isolate-override-009.html css-writing-modes/reference/bidi-isolate-override-009.html
-== css-writing-modes/bidi-isolate-override-010.html css-writing-modes/reference/bidi-isolate-override-010.html
-== css-writing-modes/bidi-isolate-override-011.html css-writing-modes/reference/bidi-isolate-override-011.html
-== css-writing-modes/bidi-isolate-override-012.html css-writing-modes/reference/bidi-isolate-override-012.html
-== css-writing-modes/bidi-normal-001.html css-writing-modes/reference/bidi-normal-001.html
-== css-writing-modes/bidi-normal-002.html css-writing-modes/reference/bidi-normal-002.html
-== css-writing-modes/bidi-normal-003.html css-writing-modes/reference/bidi-normal-003.html
-== css-writing-modes/bidi-normal-004.html css-writing-modes/reference/bidi-normal-004.html
-== css-writing-modes/bidi-normal-005.html css-writing-modes/reference/bidi-normal-005.html
-== css-writing-modes/bidi-normal-006.html css-writing-modes/reference/bidi-normal-006.html
-== css-writing-modes/bidi-normal-007.html css-writing-modes/reference/bidi-normal-007.html
-== css-writing-modes/bidi-normal-008.html css-writing-modes/reference/bidi-normal-008.html
-== css-writing-modes/bidi-normal-009.html css-writing-modes/reference/bidi-normal-009.html
-== css-writing-modes/bidi-normal-010.html css-writing-modes/reference/bidi-normal-010.html
-== css-writing-modes/bidi-normal-011.html css-writing-modes/reference/bidi-normal-011.html
-== css-writing-modes/bidi-override-001.html css-writing-modes/reference/bidi-override-001.html
-== css-writing-modes/bidi-override-002.html css-writing-modes/reference/bidi-override-002.html
-== css-writing-modes/bidi-override-003.html css-writing-modes/reference/bidi-override-003.html
-== css-writing-modes/bidi-override-004.html css-writing-modes/reference/bidi-override-004.html
-== css-writing-modes/bidi-override-005.html css-writing-modes/reference/bidi-override-005.html
-== css-writing-modes/bidi-override-006.html css-writing-modes/reference/bidi-override-006.html
-== css-writing-modes/bidi-override-007.html css-writing-modes/reference/bidi-override-007.html
-== css-writing-modes/bidi-override-008.html css-writing-modes/reference/bidi-override-008.html
-== css-writing-modes/bidi-override-009.html css-writing-modes/reference/bidi-override-009.html
-== css-writing-modes/bidi-override-010.html css-writing-modes/reference/bidi-override-010.html
-== css-writing-modes/bidi-override-011.html css-writing-modes/reference/bidi-override-011.html
-== css-writing-modes/bidi-override-012.html css-writing-modes/reference/bidi-override-012.html
-== css-writing-modes/bidi-plaintext-001.html css-writing-modes/reference/bidi-plaintext-001.html
-== css-writing-modes/bidi-plaintext-002.html css-writing-modes/reference/bidi-plaintext-002.html
-== css-writing-modes/bidi-plaintext-003.html css-writing-modes/reference/bidi-plaintext-003.html
-== css-writing-modes/bidi-plaintext-004.html css-writing-modes/reference/bidi-plaintext-004.html
-== css-writing-modes/bidi-plaintext-005.html css-writing-modes/reference/bidi-plaintext-005.html
-== css-writing-modes/bidi-plaintext-006.html css-writing-modes/reference/bidi-plaintext-006.html
-== css-writing-modes/bidi-plaintext-007.html css-writing-modes/reference/bidi-plaintext-007.html
-== css-writing-modes/bidi-plaintext-008.html css-writing-modes/reference/bidi-plaintext-008.html
-== css-writing-modes/bidi-plaintext-009.html css-writing-modes/reference/bidi-plaintext-009.html
-== css-writing-modes/bidi-plaintext-010.html css-writing-modes/reference/bidi-plaintext-010.html
-== css-writing-modes/bidi-plaintext-011.html css-writing-modes/reference/bidi-plaintext-011.html
-skip == css-writing-modes/bidi-table-001.html css-writing-modes/reference/bidi-table-001.html
-== css-writing-modes/bidi-unset-001.html css-writing-modes/reference/bidi-normal-001.html
-== css-writing-modes/bidi-unset-002.html css-writing-modes/reference/bidi-normal-002.html
-== css-writing-modes/bidi-unset-003.html css-writing-modes/reference/bidi-normal-003.html
-== css-writing-modes/bidi-unset-004.html css-writing-modes/reference/bidi-normal-004.html
-== css-writing-modes/bidi-unset-005.html css-writing-modes/reference/bidi-normal-005.html
-== css-writing-modes/bidi-unset-006.html css-writing-modes/reference/bidi-normal-006.html
-== css-writing-modes/bidi-unset-007.html css-writing-modes/reference/bidi-normal-007.html
-== css-writing-modes/bidi-unset-008.html css-writing-modes/reference/bidi-normal-008.html
-== css-writing-modes/bidi-unset-009.html css-writing-modes/reference/bidi-normal-009.html
-== css-writing-modes/bidi-unset-010.html css-writing-modes/reference/bidi-normal-010.html
-== css-writing-modes/block-embed-001.html css-writing-modes/reference/block-embed-001.html
-== css-writing-modes/block-embed-002.html css-writing-modes/reference/block-embed-002.html
-== css-writing-modes/block-embed-003.html css-writing-modes/reference/block-embed-003.html
-== css-writing-modes/block-flow-direction-004.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-htb-001.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-043.xht css-writing-modes/block-flow-direction-043-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-047.xht css-writing-modes/block-flow-direction-002-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-048.xht css-writing-modes/block-flow-direction-002-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-050.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-054.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-055.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-056.xht css-writing-modes/block-flow-direction-001-ref.xht
-fails == css-writing-modes/block-flow-direction-slr-058.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-060.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-062.xht css-writing-modes/block-flow-direction-043-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-063.xht css-writing-modes/block-flow-direction-043-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-066.xht css-writing-modes/block-flow-direction-066-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-042.xht css-writing-modes/block-flow-direction-002-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-045.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-046.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-049.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-051.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-052.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-053.xht css-writing-modes/block-flow-direction-001-ref.xht
-fails == css-writing-modes/block-flow-direction-srl-057.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-059.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-061.xht css-writing-modes/block-flow-direction-002-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-064.xht css-writing-modes/block-flow-direction-002-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-065.xht css-writing-modes/block-flow-direction-025-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-003.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-007.xht css-writing-modes/block-flow-direction-002-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-008.xht css-writing-modes/block-flow-direction-002-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-010.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-014.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-015.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-016.xht css-writing-modes/block-flow-direction-001-ref.xht
-fails == css-writing-modes/block-flow-direction-vlr-018.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-020.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-022.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-023.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-002.xht css-writing-modes/block-flow-direction-002-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-005.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-006.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-009.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-011.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-012.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-013.xht css-writing-modes/block-flow-direction-001-ref.xht
-fails == css-writing-modes/block-flow-direction-vrl-017.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-019.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-021.xht css-writing-modes/block-flow-direction-002-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-024.xht css-writing-modes/block-flow-direction-002-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-025.xht css-writing-modes/block-flow-direction-025-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-026.xht css-writing-modes/block-flow-direction-vrl-026-ref.xht
-== css-writing-modes/block-override-001.html css-writing-modes/reference/block-override-001.html
-== css-writing-modes/block-override-002.html css-writing-modes/reference/block-override-002.html
-== css-writing-modes/block-override-003.html css-writing-modes/reference/block-override-003.html
-== css-writing-modes/block-override-004.html css-writing-modes/reference/block-override-004.html
-== css-writing-modes/block-override-isolate-001.html css-writing-modes/reference/block-override-isolate-001.html
-== css-writing-modes/block-override-isolate-002.html css-writing-modes/reference/block-override-isolate-002.html
-== css-writing-modes/block-override-isolate-003.html css-writing-modes/reference/block-override-isolate-003.html
-== css-writing-modes/block-override-isolate-004.html css-writing-modes/reference/block-override-isolate-004.html
-== css-writing-modes/block-plaintext-001.html css-writing-modes/reference/block-plaintext-001.html
-== css-writing-modes/block-plaintext-002.html css-writing-modes/reference/block-plaintext-002.html
-== css-writing-modes/block-plaintext-003.html css-writing-modes/reference/block-plaintext-003.html
-== css-writing-modes/block-plaintext-004.html css-writing-modes/reference/block-plaintext-004.html
-skip == css-writing-modes/block-plaintext-006.html css-writing-modes/reference/block-plaintext-006.html
-== css-writing-modes/border-conflict-element-vlr-003.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/border-conflict-element-vlr-005.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/border-conflict-element-vlr-007.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/border-conflict-element-vlr-009.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/border-conflict-element-vlr-011.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/border-conflict-element-vlr-013.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/border-conflict-element-vrl-002.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/border-conflict-element-vrl-004.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/border-conflict-element-vrl-006.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/border-conflict-element-vrl-008.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/border-conflict-element-vrl-010.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/border-conflict-element-vrl-012.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/border-spacing-vlr-003.xht css-writing-modes/border-spacing-vrl-002-ref.xht
-== css-writing-modes/border-spacing-vlr-005.xht css-writing-modes/border-spacing-vrl-002-ref.xht
-== css-writing-modes/border-spacing-vrl-002.xht css-writing-modes/border-spacing-vrl-002-ref.xht
-== css-writing-modes/border-spacing-vrl-004.xht css-writing-modes/border-spacing-vrl-002-ref.xht
-== css-writing-modes/border-vlr-007.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/border-vrl-006.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/box-offsets-rel-pos-vlr-003.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
-fuzzy-if(OSX,255,200) == css-writing-modes/box-offsets-rel-pos-vlr-005.xht css-writing-modes/box-offsets-rel-pos-vlr-005-ref.xht
-== css-writing-modes/box-offsets-rel-pos-vrl-002.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
-fuzzy-if(OSX,255,200) == css-writing-modes/box-offsets-rel-pos-vrl-004.xht css-writing-modes/box-offsets-rel-pos-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/caption-side-vlr-003.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/caption-side-vlr-005.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/caption-side-vrl-002.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/caption-side-vrl-004.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/central-baseline-alignment-002.xht css-writing-modes/central-baseline-alignment-002-ref.xht
-fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/central-baseline-alignment-003.xht css-writing-modes/central-baseline-alignment-002-ref.xht
-== css-writing-modes/clearance-calculations-vrl-002.xht css-writing-modes/clearance-calculations-vrl-002-ref.xht
-== css-writing-modes/clearance-calculations-vrl-004.xht css-writing-modes/clearance-calculations-vrl-004-ref.xht
-== css-writing-modes/clearance-calculations-vrl-006.xht css-writing-modes/clearance-calculations-vrl-006-ref.xht
-== css-writing-modes/clearance-calculations-vrl-008.xht css-writing-modes/clearance-calculations-vrl-008-ref.xht
-== css-writing-modes/clip-rect-vlr-003.xht css-writing-modes/clip-rect-vrl-002-ref.xht
-== css-writing-modes/clip-rect-vlr-005.xht css-writing-modes/clip-rect-vrl-004-ref.xht
-== css-writing-modes/clip-rect-vlr-007.xht css-writing-modes/clip-rect-vrl-006-ref.xht
-== css-writing-modes/clip-rect-vlr-009.xht css-writing-modes/clip-rect-vrl-008-ref.xht
-== css-writing-modes/clip-rect-vlr-011.xht css-writing-modes/clip-rect-vlr-011-ref.xht
-== css-writing-modes/clip-rect-vlr-013.xht css-writing-modes/clip-rect-vlr-013-ref.xht
-== css-writing-modes/clip-rect-vlr-015.xht css-writing-modes/clip-rect-vlr-015-ref.xht
-== css-writing-modes/clip-rect-vlr-017.xht css-writing-modes/clip-rect-vlr-017-ref.xht
-== css-writing-modes/clip-rect-vrl-002.xht css-writing-modes/clip-rect-vrl-002-ref.xht
-== css-writing-modes/clip-rect-vrl-004.xht css-writing-modes/clip-rect-vrl-004-ref.xht
-== css-writing-modes/clip-rect-vrl-006.xht css-writing-modes/clip-rect-vrl-006-ref.xht
-== css-writing-modes/clip-rect-vrl-008.xht css-writing-modes/clip-rect-vrl-008-ref.xht
-== css-writing-modes/clip-rect-vrl-010.xht css-writing-modes/clip-rect-vrl-010-ref.xht
-== css-writing-modes/clip-rect-vrl-012.xht css-writing-modes/clip-rect-vrl-012-ref.xht
-== css-writing-modes/clip-rect-vrl-014.xht css-writing-modes/clip-rect-vrl-014-ref.xht
-== css-writing-modes/clip-rect-vrl-016.xht css-writing-modes/clip-rect-vrl-016-ref.xht
-fails == css-writing-modes/contiguous-floated-table-vlr-003.xht reference/ref-filled-green-100px-square.xht
-fails == css-writing-modes/contiguous-floated-table-vlr-005.xht reference/ref-filled-green-100px-square.xht
-fails == css-writing-modes/contiguous-floated-table-vlr-007.xht reference/ref-filled-green-100px-square.xht
-fails == css-writing-modes/contiguous-floated-table-vlr-009.xht reference/ref-filled-green-100px-square.xht
-fails == css-writing-modes/contiguous-floated-table-vrl-002.xht reference/ref-filled-green-100px-square.xht
-fails == css-writing-modes/contiguous-floated-table-vrl-004.xht reference/ref-filled-green-100px-square.xht
-fails == css-writing-modes/contiguous-floated-table-vrl-006.xht reference/ref-filled-green-100px-square.xht
-fails == css-writing-modes/contiguous-floated-table-vrl-008.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/different-block-flow-dir-001.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/different-block-flow-dir-002.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/direction-vlr-003.xht css-writing-modes/direction-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/direction-vlr-005.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/direction-vrl-002.xht css-writing-modes/direction-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/direction-vrl-004.xht css-writing-modes/direction-vrl-004-ref.xht
-== css-writing-modes/flexbox_align-items-stretch-writing-modes.html css-writing-modes/flexbox_align-items-stretch-writing-modes-ref.html
-== css-writing-modes/float-clear-vlr-003.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/float-clear-vlr-005.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/float-clear-vlr-007.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/float-clear-vlr-009.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/float-clear-vrl-002.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/float-clear-vrl-004.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/float-clear-vrl-006.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/float-clear-vrl-008.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/float-contiguous-vlr-003.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
-== css-writing-modes/float-contiguous-vlr-005.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
-== css-writing-modes/float-contiguous-vlr-007.xht css-writing-modes/float-contiguous-vlr-007-ref.xht
-== css-writing-modes/float-contiguous-vlr-009.xht css-writing-modes/float-contiguous-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,135,902) == css-writing-modes/float-contiguous-vlr-011.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,135,902) == css-writing-modes/float-contiguous-vlr-013.xht css-writing-modes/float-contiguous-vrl-012-ref.xht
-== css-writing-modes/float-contiguous-vrl-002.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
-== css-writing-modes/float-contiguous-vrl-004.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
-== css-writing-modes/float-contiguous-vrl-006.xht css-writing-modes/float-contiguous-vrl-006-ref.xht
-== css-writing-modes/float-contiguous-vrl-008.xht css-writing-modes/float-contiguous-vrl-008-ref.xht
-fuzzy-if(OSX||winWidget,135,902) == css-writing-modes/float-contiguous-vrl-010.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,135,902) == css-writing-modes/float-contiguous-vrl-012.xht css-writing-modes/float-contiguous-vrl-012-ref.xht
-fails == css-writing-modes/float-lft-orthog-htb-in-vlr-002.xht css-writing-modes/float-lft-orthog-htb-in-vlr-002-ref.xht
-fails == css-writing-modes/float-lft-orthog-htb-in-vrl-002.xht css-writing-modes/float-lft-orthog-htb-in-vrl-002-ref.xht
-fails == css-writing-modes/float-lft-orthog-vlr-in-htb-002.xht css-writing-modes/float-lft-orthog-vlr-in-htb-002-ref.xht
-fails == css-writing-modes/float-lft-orthog-vrl-in-htb-002.xht css-writing-modes/float-lft-orthog-vrl-in-htb-002-ref.xht
-fails == css-writing-modes/float-rgt-orthog-htb-in-vlr-003.xht css-writing-modes/float-rgt-orthog-htb-in-vlr-003-ref.xht
-fails == css-writing-modes/float-rgt-orthog-htb-in-vrl-003.xht css-writing-modes/float-rgt-orthog-htb-in-vrl-003-ref.xht
-fails == css-writing-modes/float-rgt-orthog-vlr-in-htb-003.xht css-writing-modes/float-rgt-orthog-vlr-in-htb-003-ref.xht
-fails == css-writing-modes/float-rgt-orthog-vrl-in-htb-003.xht css-writing-modes/float-rgt-orthog-vrl-in-htb-003-ref.xht
-== css-writing-modes/float-shrink-to-fit-vlr-003.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/float-shrink-to-fit-vlr-005.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/float-shrink-to-fit-vlr-007.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-shrink-to-fit-vlr-009.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/float-shrink-to-fit-vrl-002.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/float-shrink-to-fit-vrl-004.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/float-shrink-to-fit-vrl-006.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-shrink-to-fit-vrl-008.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/float-shrink-to-fit-vrl-vlr-016.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vlr-003.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vlr-005.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vlr-007.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vlr-009.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vlr-011.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vlr-013.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vrl-002.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vrl-004.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vrl-006.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vrl-008.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vrl-010.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vrl-012.xht reference/ref-filled-green-100px-square.xht
-!= css-writing-modes/full-width-001.html css-writing-modes/reference/full-width-001-horizontal-notref.html
-!= css-writing-modes/full-width-001.html css-writing-modes/reference/full-width-001-nofullwidth-notref.html
-!= css-writing-modes/full-width-002.html css-writing-modes/reference/full-width-002-notcu-notref.html
-!= css-writing-modes/full-width-002.html css-writing-modes/reference/full-width-002-horizontal-notref.html
-skip != css-writing-modes/full-width-003.html css-writing-modes/reference/full-width-002-notcu-notref.html
-skip != css-writing-modes/full-width-003.html css-writing-modes/reference/full-width-002-horizontal-notref.html
-fuzzy-if(OSX||winWidget,62,404) fuzzy-if(webrender&&winWidget,92-92,100-100) == css-writing-modes/height-width-inline-non-replaced-vlr-003.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,62,404) fuzzy-if(webrender&&winWidget,92-92,100-100) == css-writing-modes/height-width-inline-non-replaced-vrl-002.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
-== css-writing-modes/horizontal-rule-vlr-003.xht css-writing-modes/horizontal-rule-vlr-003-ref.xht
-== css-writing-modes/horizontal-rule-vlr-005.xht css-writing-modes/horizontal-rule-vrl-004-ref.xht
-== css-writing-modes/horizontal-rule-vrl-002.xht css-writing-modes/horizontal-rule-vrl-002-ref.xht
-== css-writing-modes/horizontal-rule-vrl-004.xht css-writing-modes/horizontal-rule-vrl-004-ref.xht
-fails == css-writing-modes/inline-block-alignment-002.xht css-writing-modes/inline-block-alignment-002-ref.xht
-fails == css-writing-modes/inline-block-alignment-003.xht css-writing-modes/inline-block-alignment-003-ref.xht
-fails == css-writing-modes/inline-block-alignment-004.xht css-writing-modes/inline-block-alignment-002-ref.xht
-fails == css-writing-modes/inline-block-alignment-005.xht css-writing-modes/inline-block-alignment-003-ref.xht
-fuzzy-if(OSX||winWidget,111,960) == css-writing-modes/inline-block-alignment-006.xht css-writing-modes/inline-block-alignment-006-ref.xht
-fails == css-writing-modes/inline-block-alignment-007.xht css-writing-modes/inline-block-alignment-006-ref.xht
-fuzzy-if(OSX||winWidget,218,621) == css-writing-modes/inline-block-alignment-orthogonal-vlr-003.xht css-writing-modes/inline-block-alignment-orthogonal-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,218,621) == css-writing-modes/inline-block-alignment-orthogonal-vlr-005.xht css-writing-modes/inline-block-alignment-orthogonal-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,218,621) == css-writing-modes/inline-block-alignment-orthogonal-vrl-002.xht css-writing-modes/inline-block-alignment-orthogonal-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,218,621) == css-writing-modes/inline-block-alignment-orthogonal-vrl-004.xht css-writing-modes/inline-block-alignment-orthogonal-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,135,1080) == css-writing-modes/inline-block-alignment-slr-009.xht css-writing-modes/inline-block-alignment-slr-009-ref.xht
-fuzzy-if(OSX||winWidget,111,960) == css-writing-modes/inline-block-alignment-srl-008.xht css-writing-modes/inline-block-alignment-006-ref.xht
-== css-writing-modes/inline-replaced-vlr-003.xht css-writing-modes/inline-replaced-vrl-002-ref.xht
-== css-writing-modes/inline-replaced-vlr-005.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
-== css-writing-modes/inline-replaced-vrl-002.xht css-writing-modes/inline-replaced-vrl-002-ref.xht
-== css-writing-modes/inline-replaced-vrl-004.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
-fails == css-writing-modes/inline-table-alignment-002.xht css-writing-modes/inline-table-alignment-002-ref.xht
-fails == css-writing-modes/inline-table-alignment-003.xht css-writing-modes/inline-table-alignment-003-ref.xht
-fails == css-writing-modes/inline-table-alignment-004.xht css-writing-modes/inline-table-alignment-002-ref.xht
-fails == css-writing-modes/inline-table-alignment-005.xht css-writing-modes/inline-table-alignment-003-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-htb-001.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-043.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-047.xht css-writing-modes/block-flow-direction-002-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-048.xht css-writing-modes/block-flow-direction-002-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-050.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-053.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-054.xht css-writing-modes/block-flow-direction-001-ref.xht
-random == css-writing-modes/line-box-direction-slr-056.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-058.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-060.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-042.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-045.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-046.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-049.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-051.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-052.xht css-writing-modes/block-flow-direction-001-ref.xht
-random == css-writing-modes/line-box-direction-srl-055.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-057.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-059.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-003.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-007.xht css-writing-modes/block-flow-direction-002-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-008.xht css-writing-modes/block-flow-direction-002-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-010.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-013.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-014.xht css-writing-modes/block-flow-direction-001-ref.xht
-random == css-writing-modes/line-box-direction-vlr-016.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-018.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-020.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-002.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-005.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-006.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-009.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-011.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-012.xht css-writing-modes/block-flow-direction-001-ref.xht
-random == css-writing-modes/line-box-direction-vrl-015.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-017.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-019.xht css-writing-modes/block-flow-direction-001-ref.xht
-fails == css-writing-modes/line-box-height-vlr-003.xht css-writing-modes/line-box-height-vlr-003-ref.xht
-fails == css-writing-modes/line-box-height-vlr-005.xht css-writing-modes/line-box-height-vlr-003-ref.xht
-== css-writing-modes/line-box-height-vlr-007.xht css-writing-modes/line-box-height-vlr-007-ref.xht
-== css-writing-modes/line-box-height-vlr-009.xht css-writing-modes/line-box-height-vlr-007-ref.xht
-fails == css-writing-modes/line-box-height-vlr-011.xht css-writing-modes/line-box-height-vlr-011-ref.xht
-fails == css-writing-modes/line-box-height-vlr-013.xht css-writing-modes/line-box-height-vlr-011-ref.xht
-fails == css-writing-modes/line-box-height-vlr-021.xht css-writing-modes/line-box-height-vlr-021-ref.xht
-fails == css-writing-modes/line-box-height-vlr-023.xht css-writing-modes/line-box-height-vlr-023-ref.xht
-fails == css-writing-modes/line-box-height-vrl-002.xht css-writing-modes/line-box-height-vrl-002-ref.xht
-fails == css-writing-modes/line-box-height-vrl-004.xht css-writing-modes/line-box-height-vrl-002-ref.xht
-== css-writing-modes/line-box-height-vrl-006.xht css-writing-modes/line-box-height-vrl-006-ref.xht
-== css-writing-modes/line-box-height-vrl-008.xht css-writing-modes/line-box-height-vrl-006-ref.xht
-fails == css-writing-modes/line-box-height-vrl-010.xht css-writing-modes/line-box-height-vrl-010-ref.xht
-fails == css-writing-modes/line-box-height-vrl-012.xht css-writing-modes/line-box-height-vrl-010-ref.xht
-== css-writing-modes/margin-collapse-vlr-003.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vlr-009.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vlr-011.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vlr-015.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vlr-017.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vlr-025.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vlr-031.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vlr-035.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vlr-037.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vrl-002.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vrl-008.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vrl-010.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vrl-014.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vrl-016.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vrl-024.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vrl-030.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vrl-034.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-collapse-vrl-036.xht reference/ref-filled-green-100px-square.xht
-== css-writing-modes/margin-vlr-003.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/margin-vrl-002.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/normal-flow-overconstrained-vlr-003.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
-== css-writing-modes/normal-flow-overconstrained-vlr-005.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
-== css-writing-modes/normal-flow-overconstrained-vrl-002.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
-== css-writing-modes/normal-flow-overconstrained-vrl-004.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
-== css-writing-modes/ortho-htb-alongside-vrl-floats-002.xht css-writing-modes/ortho-htb-alongside-vrl-floats-002-ref.xht
-== css-writing-modes/ortho-htb-alongside-vrl-floats-006.xht css-writing-modes/ortho-htb-alongside-vrl-floats-006-ref.xht
-== css-writing-modes/ortho-htb-alongside-vrl-floats-010.xht css-writing-modes/ortho-htb-alongside-vrl-floats-010-ref.xht
-== css-writing-modes/ortho-htb-alongside-vrl-floats-014.xht css-writing-modes/ortho-htb-alongside-vrl-floats-014-ref.xht
-== css-writing-modes/outline-inline-block-vrl-006.html css-writing-modes/reference/outline-inline-block-vrl-006.html
-== css-writing-modes/outline-inline-vlr-006.html css-writing-modes/reference/outline-inline-vlr-006.html
-== css-writing-modes/outline-inline-vrl-006.html css-writing-modes/reference/outline-inline-vrl-006.html
-== css-writing-modes/overconstrained-rel-pos-ltr-left-right-vlr-005.xht css-writing-modes/overconstrained-rel-pos-ltr-left-right-vlr-005-ref.xht
-== css-writing-modes/overconstrained-rel-pos-ltr-left-right-vrl-004.xht css-writing-modes/overconstrained-rel-pos-ltr-left-right-vrl-004-ref.xht
-== css-writing-modes/overconstrained-rel-pos-ltr-top-bottom-vlr-003.xht css-writing-modes/overconstrained-rel-pos-ltr-top-bottom-vlr-003-ref.xht
-== css-writing-modes/overconstrained-rel-pos-ltr-top-bottom-vrl-002.xht css-writing-modes/overconstrained-rel-pos-ltr-top-bottom-vrl-002-ref.xht
-== css-writing-modes/overconstrained-rel-pos-rtl-left-right-vlr-009.xht css-writing-modes/overconstrained-rel-pos-rtl-left-right-vlr-009-ref.xht
-== css-writing-modes/overconstrained-rel-pos-rtl-left-right-vrl-008.xht css-writing-modes/overconstrained-rel-pos-rtl-left-right-vrl-008-ref.xht
-== css-writing-modes/overconstrained-rel-pos-rtl-top-bottom-vlr-007.xht css-writing-modes/overconstrained-rel-pos-rtl-top-bottom-vlr-007-ref.xht
-== css-writing-modes/overconstrained-rel-pos-rtl-top-bottom-vrl-006.xht css-writing-modes/overconstrained-rel-pos-rtl-top-bottom-vrl-006-ref.xht
-== css-writing-modes/padding-vlr-005.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/padding-vrl-004.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/percent-margin-vlr-003.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/percent-margin-vlr-005.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/percent-margin-vlr-007.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/percent-margin-vrl-002.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/percent-margin-vrl-004.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/percent-margin-vrl-006.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/percent-padding-vlr-003.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/percent-padding-vlr-005.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/percent-padding-vlr-007.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/percent-padding-vrl-002.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/percent-padding-vrl-004.xht css-writing-modes/margin-vrl-002-ref.xht
-== css-writing-modes/percent-padding-vrl-006.xht css-writing-modes/margin-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-slr-023.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-slr-029.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-srl-022.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-srl-028.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vlr-003.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vlr-005.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vlr-007.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vlr-009.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vrl-002.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vrl-004.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vrl-006.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vrl-008.xht css-writing-modes/block-flow-direction-001-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vlr-001.xht css-writing-modes/sizing-orthog-htb-in-vlr-001-ref.xht
-fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vlr-003.xht css-writing-modes/sizing-orthog-htb-in-vlr-003-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vlr-004.xht css-writing-modes/sizing-orthog-htb-in-vlr-004-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vlr-006.xht css-writing-modes/sizing-orthog-htb-in-vlr-006-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vlr-007.xht css-writing-modes/sizing-orthog-htb-in-vlr-007-ref.xht
-fails-if(OSX||winWidget||Android) == css-writing-modes/sizing-orthog-htb-in-vlr-008.xht css-writing-modes/sizing-orthog-htb-in-vlr-008-ref.xht
-fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vlr-009.xht css-writing-modes/sizing-orthog-htb-in-vlr-003-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vlr-010.xht css-writing-modes/sizing-orthog-htb-in-vlr-010-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vlr-011.xht css-writing-modes/sizing-orthog-htb-in-vlr-011-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vlr-012.xht css-writing-modes/sizing-orthog-htb-in-vlr-006-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vlr-013.xht css-writing-modes/sizing-orthog-htb-in-vlr-013-ref.xht
-fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vlr-015.xht css-writing-modes/sizing-orthog-htb-in-vlr-015-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vlr-016.xht css-writing-modes/sizing-orthog-htb-in-vlr-016-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vlr-018.xht css-writing-modes/sizing-orthog-htb-in-vlr-018-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vlr-019.xht css-writing-modes/sizing-orthog-htb-in-vlr-019-ref.xht
-fails-if(OSX||winWidget||Android) == css-writing-modes/sizing-orthog-htb-in-vlr-020.xht css-writing-modes/sizing-orthog-htb-in-vlr-020-ref.xht
-fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vlr-021.xht css-writing-modes/sizing-orthog-htb-in-vlr-015-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vlr-022.xht css-writing-modes/sizing-orthog-htb-in-vlr-022-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vlr-023.xht css-writing-modes/sizing-orthog-htb-in-vlr-023-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vlr-024.xht css-writing-modes/sizing-orthog-htb-in-vlr-018-ref.xht
-fails == css-writing-modes/sizing-orthog-htb-in-vrl-001.xht css-writing-modes/sizing-orthog-htb-in-vrl-001-ref.xht
-fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vrl-003.xht css-writing-modes/sizing-orthog-htb-in-vrl-003-ref.xht
-fails == css-writing-modes/sizing-orthog-htb-in-vrl-004.xht css-writing-modes/sizing-orthog-htb-in-vlr-004-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vrl-006.xht css-writing-modes/sizing-orthog-htb-in-vrl-006-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vrl-007.xht css-writing-modes/sizing-orthog-htb-in-vrl-007-ref.xht
-fails-if(OSX||winWidget||Android) == css-writing-modes/sizing-orthog-htb-in-vrl-008.xht css-writing-modes/sizing-orthog-htb-in-vrl-008-ref.xht
-fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vrl-009.xht css-writing-modes/sizing-orthog-htb-in-vrl-003-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vrl-010.xht css-writing-modes/sizing-orthog-htb-in-vrl-010-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vrl-011.xht css-writing-modes/sizing-orthog-htb-in-vrl-011-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vrl-012.xht css-writing-modes/sizing-orthog-htb-in-vrl-006-ref.xht
-fails == css-writing-modes/sizing-orthog-htb-in-vrl-013.xht css-writing-modes/sizing-orthog-htb-in-vrl-013-ref.xht
-fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vrl-015.xht css-writing-modes/sizing-orthog-htb-in-vrl-015-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vrl-016.xht css-writing-modes/sizing-orthog-htb-in-vlr-016-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vrl-018.xht css-writing-modes/sizing-orthog-htb-in-vrl-018-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vrl-019.xht css-writing-modes/sizing-orthog-htb-in-vrl-019-ref.xht
-fails-if(OSX||winWidget||Android) == css-writing-modes/sizing-orthog-htb-in-vrl-020.xht css-writing-modes/sizing-orthog-htb-in-vrl-020-ref.xht
-fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vrl-021.xht css-writing-modes/sizing-orthog-htb-in-vrl-015-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vrl-022.xht css-writing-modes/sizing-orthog-htb-in-vrl-022-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vrl-023.xht css-writing-modes/sizing-orthog-htb-in-vrl-023-ref.xht
-== css-writing-modes/sizing-orthog-htb-in-vrl-024.xht css-writing-modes/sizing-orthog-htb-in-vrl-018-ref.xht
-== css-writing-modes/sizing-orthog-prct-htb-in-vlr-001.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-001-ref.xht
-== css-writing-modes/sizing-orthog-prct-htb-in-vlr-002.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-002-ref.xht
-== css-writing-modes/sizing-orthog-prct-htb-in-vlr-003.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-003-ref.xht
-== css-writing-modes/sizing-orthog-prct-htb-in-vlr-004.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-004-ref.xht
-== css-writing-modes/sizing-orthog-prct-htb-in-vlr-005.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-005-ref.xht
-== css-writing-modes/sizing-orthog-prct-htb-in-vlr-006.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-006-ref.xht
-== css-writing-modes/sizing-orthog-prct-htb-in-vlr-007.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-007-ref.xht
-== css-writing-modes/sizing-orthog-prct-htb-in-vlr-008.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-008-ref.xht
-== css-writing-modes/sizing-orthog-prct-htb-in-vrl-001.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-001-ref.xht
-== css-writing-modes/sizing-orthog-prct-htb-in-vrl-002.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-002-ref.xht
-== css-writing-modes/sizing-orthog-prct-htb-in-vrl-003.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-003-ref.xht
-== css-writing-modes/sizing-orthog-prct-htb-in-vrl-004.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-004-ref.xht
-== css-writing-modes/sizing-orthog-prct-htb-in-vrl-005.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-005-ref.xht
-== css-writing-modes/sizing-orthog-prct-htb-in-vrl-006.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-006-ref.xht
-== css-writing-modes/sizing-orthog-prct-htb-in-vrl-007.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-007-ref.xht
-== css-writing-modes/sizing-orthog-prct-htb-in-vrl-008.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-008-ref.xht
-== css-writing-modes/sizing-orthog-prct-vlr-in-htb-001.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-001-ref.xht
-== css-writing-modes/sizing-orthog-prct-vlr-in-htb-002.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-002-ref.xht
-== css-writing-modes/sizing-orthog-prct-vlr-in-htb-003.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-003-ref.xht
-== css-writing-modes/sizing-orthog-prct-vlr-in-htb-004.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-004-ref.xht
-== css-writing-modes/sizing-orthog-prct-vlr-in-htb-005.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-005-ref.xht
-== css-writing-modes/sizing-orthog-prct-vlr-in-htb-006.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-006-ref.xht
-== css-writing-modes/sizing-orthog-prct-vlr-in-htb-007.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-007-ref.xht
-== css-writing-modes/sizing-orthog-prct-vlr-in-htb-008.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-008-ref.xht
-== css-writing-modes/sizing-orthog-prct-vrl-in-htb-001.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-001-ref.xht
-== css-writing-modes/sizing-orthog-prct-vrl-in-htb-002.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-002-ref.xht
-== css-writing-modes/sizing-orthog-prct-vrl-in-htb-003.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-003-ref.xht
-== css-writing-modes/sizing-orthog-prct-vrl-in-htb-004.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-004-ref.xht
-== css-writing-modes/sizing-orthog-prct-vrl-in-htb-005.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-005-ref.xht
-== css-writing-modes/sizing-orthog-prct-vrl-in-htb-006.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-006-ref.xht
-== css-writing-modes/sizing-orthog-prct-vrl-in-htb-007.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-007-ref.xht
-== css-writing-modes/sizing-orthog-prct-vrl-in-htb-008.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-008-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-001.xht css-writing-modes/sizing-orthog-vlr-in-htb-001-ref.xht
-fails-if(Android) == css-writing-modes/sizing-orthog-vlr-in-htb-003.xht css-writing-modes/sizing-orthog-vlr-in-htb-003-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-004.xht css-writing-modes/sizing-orthog-vlr-in-htb-004-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-006.xht css-writing-modes/sizing-orthog-vlr-in-htb-006-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-007.xht css-writing-modes/sizing-orthog-vlr-in-htb-007-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-008.xht css-writing-modes/sizing-orthog-vlr-in-htb-008-ref.xht
-fails-if(Android) == css-writing-modes/sizing-orthog-vlr-in-htb-009.xht css-writing-modes/sizing-orthog-vlr-in-htb-009-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-010.xht css-writing-modes/sizing-orthog-vlr-in-htb-010-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-011.xht css-writing-modes/sizing-orthog-vlr-in-htb-011-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-012.xht css-writing-modes/sizing-orthog-vlr-in-htb-012-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-013.xht css-writing-modes/sizing-orthog-vlr-in-htb-013-ref.xht
-fails-if(Android) == css-writing-modes/sizing-orthog-vlr-in-htb-015.xht css-writing-modes/sizing-orthog-vlr-in-htb-015-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-016.xht css-writing-modes/sizing-orthog-vlr-in-htb-016-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-018.xht css-writing-modes/sizing-orthog-vlr-in-htb-018-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-019.xht css-writing-modes/sizing-orthog-vlr-in-htb-019-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-020.xht css-writing-modes/sizing-orthog-vlr-in-htb-020-ref.xht
-fails-if(Android) == css-writing-modes/sizing-orthog-vlr-in-htb-021.xht css-writing-modes/sizing-orthog-vlr-in-htb-015-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-022.xht css-writing-modes/sizing-orthog-vlr-in-htb-022-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-023.xht css-writing-modes/sizing-orthog-vlr-in-htb-023-ref.xht
-== css-writing-modes/sizing-orthog-vlr-in-htb-024.xht css-writing-modes/sizing-orthog-vlr-in-htb-018-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-001.xht css-writing-modes/sizing-orthog-vrl-in-htb-001-ref.xht
-fails-if(Android) == css-writing-modes/sizing-orthog-vrl-in-htb-003.xht css-writing-modes/sizing-orthog-vrl-in-htb-003-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-004.xht css-writing-modes/sizing-orthog-vrl-in-htb-004-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-006.xht css-writing-modes/sizing-orthog-vrl-in-htb-006-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-007.xht css-writing-modes/sizing-orthog-vrl-in-htb-007-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-008.xht css-writing-modes/sizing-orthog-vrl-in-htb-008-ref.xht
-fails-if(Android) == css-writing-modes/sizing-orthog-vrl-in-htb-009.xht css-writing-modes/sizing-orthog-vrl-in-htb-009-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-010.xht css-writing-modes/sizing-orthog-vrl-in-htb-010-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-011.xht css-writing-modes/sizing-orthog-vrl-in-htb-011-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-012.xht css-writing-modes/sizing-orthog-vrl-in-htb-012-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-013.xht css-writing-modes/sizing-orthog-vrl-in-htb-013-ref.xht
-fails-if(Android) == css-writing-modes/sizing-orthog-vrl-in-htb-015.xht css-writing-modes/sizing-orthog-vrl-in-htb-015-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-016.xht css-writing-modes/sizing-orthog-vrl-in-htb-016-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-018.xht css-writing-modes/sizing-orthog-vrl-in-htb-018-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-019.xht css-writing-modes/sizing-orthog-vrl-in-htb-019-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-020.xht css-writing-modes/sizing-orthog-vrl-in-htb-020-ref.xht
-fails-if(Android) == css-writing-modes/sizing-orthog-vrl-in-htb-021.xht css-writing-modes/sizing-orthog-vrl-in-htb-015-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-022.xht css-writing-modes/sizing-orthog-vrl-in-htb-022-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-023.xht css-writing-modes/sizing-orthog-vrl-in-htb-023-ref.xht
-== css-writing-modes/sizing-orthog-vrl-in-htb-024.xht css-writing-modes/sizing-orthog-vrl-in-htb-018-ref.xht
-skip == css-writing-modes/table-cell-001.html css-writing-modes/reference/table-cell-001-ref.html
-skip == css-writing-modes/table-cell-002.html css-writing-modes/reference/table-cell-002-ref.html
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-002.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-003.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-004.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-005.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(winWidget,110,1200) == css-writing-modes/table-column-order-slr-007.xht css-writing-modes/block-flow-direction-001-ref.xht
-fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-srl-006.xht css-writing-modes/block-flow-direction-001-ref.xht
-== css-writing-modes/table-progression-slr-001.html css-writing-modes/table-progression-slr-001-ref.html
-fails == css-writing-modes/table-progression-slr-002.html css-writing-modes/table-progression-002-ref.html
-== css-writing-modes/table-progression-srl-001.html css-writing-modes/table-progression-001-ref.html
-fails == css-writing-modes/table-progression-srl-002.html css-writing-modes/table-progression-002-ref.html
-== css-writing-modes/table-progression-vlr-001.html css-writing-modes/table-progression-001-ref.html
-fails == css-writing-modes/table-progression-vlr-002.html css-writing-modes/table-progression-002-ref.html
-fails == css-writing-modes/table-progression-vlr-003.html css-writing-modes/table-progression-001-ref.html
-fails == css-writing-modes/table-progression-vlr-004.html css-writing-modes/table-progression-002-ref.html
-== css-writing-modes/table-progression-vrl-001.html css-writing-modes/table-progression-001-ref.html
-fails == css-writing-modes/table-progression-vrl-002.html css-writing-modes/table-progression-002-ref.html
-fails == css-writing-modes/table-progression-vrl-003.html css-writing-modes/table-progression-001-ref.html
-fails == css-writing-modes/table-progression-vrl-004.html css-writing-modes/table-progression-002-ref.html
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-003.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-005.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-007.xht reference/ref-filled-green-100px-square.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-009.xht css-writing-modes/text-align-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-011.xht css-writing-modes/text-align-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-013.xht css-writing-modes/text-align-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-015.xht css-writing-modes/direction-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-017.xht css-writing-modes/direction-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-019.xht css-writing-modes/direction-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-002.xht css-writing-modes/direction-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-004.xht css-writing-modes/direction-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-006.xht css-writing-modes/direction-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-008.xht css-writing-modes/text-align-vrl-008-ref.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-010.xht css-writing-modes/text-align-vrl-008-ref.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-012.xht css-writing-modes/text-align-vrl-008-ref.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-014.xht css-writing-modes/direction-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-016.xht css-writing-modes/direction-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-018.xht css-writing-modes/direction-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-slr-009.xht css-writing-modes/text-baseline-slr-009-ref.xht
-fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-srl-008.xht css-writing-modes/text-baseline-vrl-006-ref.xht
-fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vlr-003.xht css-writing-modes/text-baseline-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vlr-005.xht css-writing-modes/text-baseline-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vlr-007.xht css-writing-modes/text-baseline-vrl-006-ref.xht
-fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vrl-002.xht css-writing-modes/text-baseline-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vrl-004.xht css-writing-modes/text-baseline-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vrl-006.xht css-writing-modes/text-baseline-vrl-006-ref.xht
-fuzzy-if(OSX,15,16) == css-writing-modes/text-combine-upright-decorations-001.html css-writing-modes/reference/text-combine-upright-decorations-001.html
-== css-writing-modes/text-combine-upright-inherit-all-001.html css-writing-modes/reference/text-combine-upright-inherit-all-001.html
-== css-writing-modes/text-combine-upright-inherit-all-002.html css-writing-modes/reference/text-combine-upright-inherit-all-002.html
-== css-writing-modes/text-combine-upright-layout-rules-001.html css-writing-modes/reference/text-combine-upright-layout-rules-001-ref.html
-== css-writing-modes/text-combine-upright-line-breaking-rules-001.html css-writing-modes/text-combine-upright-line-breaking-rules-001-ref.html
-fuzzy(255,960) == css-writing-modes/text-combine-upright-value-all-001.html css-writing-modes/reference/text-combine-upright-value-single-character.html
-fuzzy(255,960) == css-writing-modes/text-combine-upright-value-all-002.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
-fuzzy(255,960) != css-writing-modes/text-combine-upright-value-all-002.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
-fuzzy(255,960) == css-writing-modes/text-combine-upright-value-all-003.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
-fuzzy(255,960) != css-writing-modes/text-combine-upright-value-all-003.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
-skip == css-writing-modes/text-combine-upright-value-digits2-001.html css-writing-modes/reference/text-combine-upright-value-single-character.html
-skip == css-writing-modes/text-combine-upright-value-digits2-002.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
-skip != css-writing-modes/text-combine-upright-value-digits2-002.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
-== css-writing-modes/text-combine-upright-value-digits2-003.html css-writing-modes/reference/vertical-ahem-1x3-ref.html
-!= css-writing-modes/text-combine-upright-value-digits2-003.html css-writing-modes/reference/horizontal-ahem-1x3-notref.html
-skip == css-writing-modes/text-combine-upright-value-digits3-001.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
-skip != css-writing-modes/text-combine-upright-value-digits3-001.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
-skip == css-writing-modes/text-combine-upright-value-digits3-002.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
-skip != css-writing-modes/text-combine-upright-value-digits3-002.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
-== css-writing-modes/text-combine-upright-value-digits3-003.html css-writing-modes/reference/vertical-ahem-1x4-ref.html
-!= css-writing-modes/text-combine-upright-value-digits3-003.html css-writing-modes/reference/horizontal-ahem-1x4-notref.html
-skip == css-writing-modes/text-combine-upright-value-digits4-001.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
-skip != css-writing-modes/text-combine-upright-value-digits4-001.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
-skip == css-writing-modes/text-combine-upright-value-digits4-002.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
-skip != css-writing-modes/text-combine-upright-value-digits4-002.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
-== css-writing-modes/text-combine-upright-value-digits4-003.html css-writing-modes/reference/vertical-ahem-1x5-ref.html
-!= css-writing-modes/text-combine-upright-value-digits4-003.html css-writing-modes/reference/horizontal-ahem-1x5-notref.html
-== css-writing-modes/text-combine-upright-value-none-001.html css-writing-modes/reference/vertical-ahem-1x3-ref.html
-!= css-writing-modes/text-combine-upright-value-none-001.html css-writing-modes/reference/horizontal-ahem-1x3-notref.html
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-003.xht css-writing-modes/text-indent-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-005.xht css-writing-modes/text-indent-vlr-005-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-007.xht css-writing-modes/text-indent-vlr-003-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-009.xht css-writing-modes/text-indent-vlr-005-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-011.xht css-writing-modes/text-indent-vlr-011-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-013.xht css-writing-modes/text-indent-vlr-013-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-015.xht css-writing-modes/text-indent-vlr-011-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-017.xht css-writing-modes/text-indent-vlr-013-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-002.xht css-writing-modes/text-indent-vrl-002-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-004.xht css-writing-modes/text-indent-vrl-004-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-006.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-008.xht css-writing-modes/text-indent-vrl-008-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-010.xht css-writing-modes/text-indent-vrl-010-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-012.xht css-writing-modes/text-indent-vrl-012-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-014.xht css-writing-modes/text-indent-vrl-010-ref.xht
-fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-016.xht css-writing-modes/text-indent-vrl-012-ref.xht
-fuzzy-if(OSX||winWidget,226,960) == css-writing-modes/text-orientation-016.xht css-writing-modes/text-orientation-016-ref.xht
-== css-writing-modes/text-orientation-mixed-srl-016.xht css-writing-modes/text-orientation-mixed-srl-016-ref.xht
-== css-writing-modes/text-orientation-mixed-vlr-100.html css-writing-modes/text-orientation-mixed-vlr-100-ref.html
-== css-writing-modes/text-orientation-mixed-vrl-100.html css-writing-modes/text-orientation-mixed-vrl-100-ref.html
-== css-writing-modes/text-orientation-sideways-vlr-100.html css-writing-modes/text-orientation-sideways-vlr-100-ref.html
-== css-writing-modes/text-orientation-sideways-vrl-100.html css-writing-modes/text-orientation-sideways-vrl-100-ref.html
-== css-writing-modes/text-orientation-upright-srl-018.xht css-writing-modes/text-orientation-mixed-srl-016-ref.xht
-== css-writing-modes/text-orientation-upright-vlr-100.html css-writing-modes/text-orientation-upright-vlr-100-ref.html
-== css-writing-modes/text-orientation-upright-vrl-100.html css-writing-modes/text-orientation-upright-vrl-100-ref.html
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-002.xht css-writing-modes/vertical-alignment-002-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-003.xht css-writing-modes/vertical-alignment-002-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-004.xht css-writing-modes/vertical-alignment-004-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-005.xht css-writing-modes/vertical-alignment-004-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-006.xht css-writing-modes/vertical-alignment-006-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-007.xht css-writing-modes/vertical-alignment-006-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-008.xht css-writing-modes/vertical-alignment-008-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-009.xht css-writing-modes/vertical-alignment-008-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-slr-029.xht css-writing-modes/vertical-alignment-008-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-slr-031.xht css-writing-modes/vertical-alignment-006-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-slr-033.xht css-writing-modes/vertical-alignment-004-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-slr-035.xht css-writing-modes/vertical-alignment-002-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-slr-041.xht css-writing-modes/vertical-alignment-slr-049-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-srl-028.xht css-writing-modes/vertical-alignment-002-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-srl-030.xht css-writing-modes/vertical-alignment-004-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-srl-032.xht css-writing-modes/vertical-alignment-006-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-srl-034.xht css-writing-modes/vertical-alignment-008-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-srl-040.xht css-writing-modes/vertical-alignment-vrl-026-ref.xht
-fails == css-writing-modes/vertical-alignment-vlr-023.xht css-writing-modes/vertical-alignment-vrl-022-ref.xht
-fails == css-writing-modes/vertical-alignment-vlr-025.xht css-writing-modes/vertical-alignment-vrl-022-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-vlr-027.xht css-writing-modes/vertical-alignment-vrl-026-ref.xht
-fails == css-writing-modes/vertical-alignment-vrl-022.xht css-writing-modes/vertical-alignment-vrl-022-ref.xht
-fails == css-writing-modes/vertical-alignment-vrl-024.xht css-writing-modes/vertical-alignment-vrl-022-ref.xht
-fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-vrl-026.xht css-writing-modes/vertical-alignment-vrl-026-ref.xht
-fails == css-writing-modes/wm-propagation-body-006.xht css-writing-modes/block-flow-direction-025-ref.xht
-fails == css-writing-modes/wm-propagation-body-008.xht css-writing-modes/block-flow-direction-025-ref.xht
-fails == css-writing-modes/wm-propagation-body-010.xht css-writing-modes/wm-propagation-body-003-ref.xht
-fails == css-writing-modes/wm-propagation-body-011.xht css-writing-modes/wm-propagation-body-003-ref.xht
-fails == css-writing-modes/wm-propagation-body-015.xht css-writing-modes/block-flow-direction-025-ref.xht
-== css-writing-modes/writing-mode-horizontal-001l.html css-writing-modes/reference/writing-mode-horizontal-001l-ref.html
-== css-writing-modes/writing-mode-horizontal-001r.html css-writing-modes/reference/writing-mode-horizontal-001r-ref.html
-fuzzy-if(OSX||winWidget,153,612) == css-writing-modes/writing-mode-vertical-lr-002.xht css-writing-modes/reftest/writing-mode-vertical-lr-002-ref.xht
-fuzzy-if(OSX||winWidget,153,612) == css-writing-modes/writing-mode-vertical-rl-001.xht css-writing-modes/reftest/writing-mode-vertical-rl-001-ref.xht
-fuzzy-if(OSX||winWidget,153,612) == css-writing-modes/writing-mode-vertical-rl-002.xht css-writing-modes/reftest/writing-mode-vertical-rl-002-ref.xht
-fuzzy-if(OSX||winWidget,153,612) == css-writing-modes/writing-mode-vertical-rl-003.htm css-writing-modes/writing-mode-vertical-rl-003-ref.htm
 skip == selectors/any-link-dynamic-001.html selectors/any-link-dynamic-001-ref.html
 needs-focus == selectors/focus-within-001.html selectors/focus-within-001-ref.html
 needs-focus == selectors/focus-within-002.html selectors/focus-within-001-ref.html
 needs-focus == selectors/focus-within-003.html selectors/focus-within-001-ref.html
 needs-focus == selectors/focus-within-004.html selectors/focus-within-001-ref.html
 needs-focus == selectors/focus-within-005.html selectors/focus-within-001-ref.html
 needs-focus == selectors/focus-within-006.html selectors/focus-within-006-ref.html
 needs-focus == selectors/focus-within-007.html selectors/focus-within-007-ref.html
new file mode 100644
--- /dev/null
+++ b/layout/reftests/w3c-css/received/reftest_writing_modes.list
@@ -0,0 +1,922 @@
+== css-writing-modes/abs-pos-non-replaced-icb-vlr-003.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vlr-005.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-004-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vlr-007.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vlr-009.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vlr-011.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vlr-013.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-004-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vlr-015.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vlr-017.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vlr-019.xht reference/ref-filled-green-100px-square.xht
+skip == css-writing-modes/abs-pos-non-replaced-icb-vlr-021.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vlr-023.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vlr-025.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vlr-027.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vlr-029.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vlr-031.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vlr-033.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vrl-002.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vrl-004.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-004-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vrl-006.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vrl-008.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vrl-010.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vrl-012.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-004-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vrl-014.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vrl-016.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vrl-018.xht reference/ref-filled-green-100px-square.xht
+skip == css-writing-modes/abs-pos-non-replaced-icb-vrl-020.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vrl-022.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vrl-024.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vrl-026.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vrl-028.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vrl-030.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/abs-pos-non-replaced-icb-vrl-032.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-003.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-005.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-007.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-009.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-011.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-013.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-015.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-017.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-019.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-021.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-023.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-025.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-027.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-029.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-031.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-033.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-035.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-037.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-039.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-041.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-043.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-045.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-047.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-049.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-051.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-053.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-055.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-057.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-059.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-061.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-063.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-065.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-067.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-069.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-071.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-073.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-075.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-077.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-079.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-081.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-083.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-085.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-087.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-089.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-091.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-093.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-095.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-097.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-103.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-105.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-107.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-109.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-111.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-113.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-115.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-117.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-119.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-121.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-123.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-125.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-127.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-129.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-131.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-133.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-135.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-137.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-139.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-141.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-143.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-145.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-147.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-149.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-151.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-153.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-155.xht css-writing-modes/abs-pos-non-replaced-vlr-155-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-157.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-159.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-161.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-163.xht css-writing-modes/abs-pos-non-replaced-vlr-163-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-165.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-167.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-169.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-171.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-173.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-175.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-177.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-179.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-181.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-183.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-185.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-187.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-189.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-191.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-193.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-195.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-197.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-199.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-201.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-203.xht css-writing-modes/abs-pos-non-replaced-vlr-155-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-205.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-207.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-209.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-211.xht css-writing-modes/abs-pos-non-replaced-vlr-163-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-213.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-215.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-217.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-219.xht css-writing-modes/abs-pos-non-replaced-vlr-155-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-221.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-223.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-225.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-227.xht css-writing-modes/abs-pos-non-replaced-vlr-163-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vlr-229.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-002.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-004.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-006.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-008.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-010.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-012.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-014.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-016.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-018.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-020.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-022.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-024.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-026.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-028.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-030.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-032.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-034.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-036.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-038.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-040.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-042.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-044.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-046.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-048.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-050.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-052.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-054.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-056.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-058.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-060.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-062.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-064.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-066.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-068.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-070.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-072.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-074.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-076.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-078.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-080.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-082.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-084.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-086.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-088.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-090.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-092.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-094.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-096.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-102.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-104.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-106.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-108.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-110.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-112.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-114.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-116.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-118.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-120.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-122.xht css-writing-modes/abs-pos-non-replaced-vrl-122-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-124.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-126.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-128.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-130.xht css-writing-modes/abs-pos-non-replaced-vrl-130-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-132.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-134.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-136.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-138.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-140.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-142.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-144.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-146.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-148.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-150.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-152.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-154.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-156.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-158.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-160.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-162.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-164.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-166.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-168.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-170.xht css-writing-modes/abs-pos-non-replaced-vrl-122-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-172.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-174.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-176.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-178.xht css-writing-modes/abs-pos-non-replaced-vrl-130-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-180.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-182.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-184.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-186.xht css-writing-modes/abs-pos-non-replaced-vrl-122-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-188.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-190.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-192.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-194.xht css-writing-modes/abs-pos-non-replaced-vrl-130-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-196.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-198.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-200.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-202.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-204.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-206.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-208.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-210.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-212.xht css-writing-modes/abs-pos-non-replaced-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-214.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-216.xht css-writing-modes/abs-pos-non-replaced-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-218.xht css-writing-modes/abs-pos-non-replaced-vrl-122-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-220.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-222.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-224.xht css-writing-modes/abs-pos-non-replaced-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-226.xht css-writing-modes/abs-pos-non-replaced-vrl-130-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/abs-pos-non-replaced-vrl-228.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+== css-writing-modes/background-position-vrl-018.xht css-writing-modes/background-position-vrl-018-ref.xht
+== css-writing-modes/background-position-vrl-020.xht css-writing-modes/background-position-vrl-018-ref.xht
+== css-writing-modes/background-position-vrl-022.xht css-writing-modes/background-position-vrl-018-ref.xht
+== css-writing-modes/background-size-document-root-vrl-002.html css-writing-modes/background-size-document-root-vrl-002-ref.xht
+== css-writing-modes/background-size-document-root-vrl-004.html css-writing-modes/background-size-document-root-vrl-002-ref.xht
+== css-writing-modes/background-size-document-root-vrl-006.html css-writing-modes/background-size-document-root-vrl-002-ref.xht
+== css-writing-modes/background-size-document-root-vrl-008.html css-writing-modes/background-size-document-root-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,93,600) == css-writing-modes/baseline-inline-non-replaced-002.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,600) == css-writing-modes/baseline-inline-non-replaced-003.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,600) == css-writing-modes/baseline-inline-non-replaced-004.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,600) == css-writing-modes/baseline-inline-non-replaced-005.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/baseline-inline-replaced-002.xht css-writing-modes/baseline-inline-replaced-002-ref.xht
+== css-writing-modes/baseline-inline-replaced-003.xht css-writing-modes/baseline-inline-replaced-002-ref.xht
+== css-writing-modes/bidi-embed-001.html css-writing-modes/reference/bidi-embed-001.html
+== css-writing-modes/bidi-embed-002.html css-writing-modes/reference/bidi-embed-002.html
+== css-writing-modes/bidi-embed-003.html css-writing-modes/reference/bidi-embed-003.html
+== css-writing-modes/bidi-embed-004.html css-writing-modes/reference/bidi-embed-004.html
+== css-writing-modes/bidi-embed-005.html css-writing-modes/reference/bidi-embed-005.html
+== css-writing-modes/bidi-embed-006.html css-writing-modes/reference/bidi-embed-006.html
+== css-writing-modes/bidi-embed-007.html css-writing-modes/reference/bidi-embed-007.html
+== css-writing-modes/bidi-embed-008.html css-writing-modes/reference/bidi-embed-008.html
+== css-writing-modes/bidi-embed-009.html css-writing-modes/reference/bidi-embed-009.html
+== css-writing-modes/bidi-embed-010.html css-writing-modes/reference/bidi-embed-010.html
+== css-writing-modes/bidi-embed-011.html css-writing-modes/reference/bidi-embed-011.html
+== css-writing-modes/bidi-isolate-001.html css-writing-modes/reference/bidi-isolate-001.html
+== css-writing-modes/bidi-isolate-002.html css-writing-modes/reference/bidi-isolate-002.html
+== css-writing-modes/bidi-isolate-003.html css-writing-modes/reference/bidi-isolate-003.html
+== css-writing-modes/bidi-isolate-004.html css-writing-modes/reference/bidi-isolate-004.html
+== css-writing-modes/bidi-isolate-005.html css-writing-modes/reference/bidi-isolate-005.html
+== css-writing-modes/bidi-isolate-006.html css-writing-modes/reference/bidi-isolate-006.html
+== css-writing-modes/bidi-isolate-007.html css-writing-modes/reference/bidi-isolate-007.html
+== css-writing-modes/bidi-isolate-008.html css-writing-modes/reference/bidi-isolate-008.html
+== css-writing-modes/bidi-isolate-009.html css-writing-modes/reference/bidi-isolate-009.html
+== css-writing-modes/bidi-isolate-010.html css-writing-modes/reference/bidi-isolate-010.html
+== css-writing-modes/bidi-isolate-011.html css-writing-modes/reference/bidi-embed-011.html
+== css-writing-modes/bidi-isolate-override-001.html css-writing-modes/reference/bidi-isolate-override-001.html
+== css-writing-modes/bidi-isolate-override-002.html css-writing-modes/reference/bidi-isolate-override-002.html
+== css-writing-modes/bidi-isolate-override-003.html css-writing-modes/reference/bidi-isolate-override-003.html
+== css-writing-modes/bidi-isolate-override-004.html css-writing-modes/reference/bidi-isolate-override-004.html
+== css-writing-modes/bidi-isolate-override-005.html css-writing-modes/reference/bidi-isolate-override-005.html
+== css-writing-modes/bidi-isolate-override-006.html css-writing-modes/reference/bidi-isolate-override-006.html
+== css-writing-modes/bidi-isolate-override-007.html css-writing-modes/reference/bidi-isolate-override-007.html
+== css-writing-modes/bidi-isolate-override-008.html css-writing-modes/reference/bidi-isolate-override-008.html
+== css-writing-modes/bidi-isolate-override-009.html css-writing-modes/reference/bidi-isolate-override-009.html
+== css-writing-modes/bidi-isolate-override-010.html css-writing-modes/reference/bidi-isolate-override-010.html
+== css-writing-modes/bidi-isolate-override-011.html css-writing-modes/reference/bidi-isolate-override-011.html
+== css-writing-modes/bidi-isolate-override-012.html css-writing-modes/reference/bidi-isolate-override-012.html
+== css-writing-modes/bidi-normal-001.html css-writing-modes/reference/bidi-normal-001.html
+== css-writing-modes/bidi-normal-002.html css-writing-modes/reference/bidi-normal-002.html
+== css-writing-modes/bidi-normal-003.html css-writing-modes/reference/bidi-normal-003.html
+== css-writing-modes/bidi-normal-004.html css-writing-modes/reference/bidi-normal-004.html
+== css-writing-modes/bidi-normal-005.html css-writing-modes/reference/bidi-normal-005.html
+== css-writing-modes/bidi-normal-006.html css-writing-modes/reference/bidi-normal-006.html
+== css-writing-modes/bidi-normal-007.html css-writing-modes/reference/bidi-normal-007.html
+== css-writing-modes/bidi-normal-008.html css-writing-modes/reference/bidi-normal-008.html
+== css-writing-modes/bidi-normal-009.html css-writing-modes/reference/bidi-normal-009.html
+== css-writing-modes/bidi-normal-010.html css-writing-modes/reference/bidi-normal-010.html
+== css-writing-modes/bidi-normal-011.html css-writing-modes/reference/bidi-normal-011.html
+== css-writing-modes/bidi-override-001.html css-writing-modes/reference/bidi-override-001.html
+== css-writing-modes/bidi-override-002.html css-writing-modes/reference/bidi-override-002.html
+== css-writing-modes/bidi-override-003.html css-writing-modes/reference/bidi-override-003.html
+== css-writing-modes/bidi-override-004.html css-writing-modes/reference/bidi-override-004.html
+== css-writing-modes/bidi-override-005.html css-writing-modes/reference/bidi-override-005.html
+== css-writing-modes/bidi-override-006.html css-writing-modes/reference/bidi-override-006.html
+== css-writing-modes/bidi-override-007.html css-writing-modes/reference/bidi-override-007.html
+== css-writing-modes/bidi-override-008.html css-writing-modes/reference/bidi-override-008.html
+== css-writing-modes/bidi-override-009.html css-writing-modes/reference/bidi-override-009.html
+== css-writing-modes/bidi-override-010.html css-writing-modes/reference/bidi-override-010.html
+== css-writing-modes/bidi-override-011.html css-writing-modes/reference/bidi-override-011.html
+== css-writing-modes/bidi-override-012.html css-writing-modes/reference/bidi-override-012.html
+== css-writing-modes/bidi-plaintext-001.html css-writing-modes/reference/bidi-plaintext-001.html
+== css-writing-modes/bidi-plaintext-002.html css-writing-modes/reference/bidi-plaintext-002.html
+== css-writing-modes/bidi-plaintext-003.html css-writing-modes/reference/bidi-plaintext-003.html
+== css-writing-modes/bidi-plaintext-004.html css-writing-modes/reference/bidi-plaintext-004.html
+== css-writing-modes/bidi-plaintext-005.html css-writing-modes/reference/bidi-plaintext-005.html
+== css-writing-modes/bidi-plaintext-006.html css-writing-modes/reference/bidi-plaintext-006.html
+== css-writing-modes/bidi-plaintext-007.html css-writing-modes/reference/bidi-plaintext-007.html
+== css-writing-modes/bidi-plaintext-008.html css-writing-modes/reference/bidi-plaintext-008.html
+== css-writing-modes/bidi-plaintext-009.html css-writing-modes/reference/bidi-plaintext-009.html
+== css-writing-modes/bidi-plaintext-010.html css-writing-modes/reference/bidi-plaintext-010.html
+== css-writing-modes/bidi-plaintext-011.html css-writing-modes/reference/bidi-plaintext-011.html
+skip == css-writing-modes/bidi-table-001.html css-writing-modes/reference/bidi-table-001.html
+== css-writing-modes/bidi-unset-001.html css-writing-modes/reference/bidi-normal-001.html
+== css-writing-modes/bidi-unset-002.html css-writing-modes/reference/bidi-normal-002.html
+== css-writing-modes/bidi-unset-003.html css-writing-modes/reference/bidi-normal-003.html
+== css-writing-modes/bidi-unset-004.html css-writing-modes/reference/bidi-normal-004.html
+== css-writing-modes/bidi-unset-005.html css-writing-modes/reference/bidi-normal-005.html
+== css-writing-modes/bidi-unset-006.html css-writing-modes/reference/bidi-normal-006.html
+== css-writing-modes/bidi-unset-007.html css-writing-modes/reference/bidi-normal-007.html
+== css-writing-modes/bidi-unset-008.html css-writing-modes/reference/bidi-normal-008.html
+== css-writing-modes/bidi-unset-009.html css-writing-modes/reference/bidi-normal-009.html
+== css-writing-modes/bidi-unset-010.html css-writing-modes/reference/bidi-normal-010.html
+== css-writing-modes/block-embed-001.html css-writing-modes/reference/block-embed-001.html
+== css-writing-modes/block-embed-002.html css-writing-modes/reference/block-embed-002.html
+== css-writing-modes/block-embed-003.html css-writing-modes/reference/block-embed-003.html
+== css-writing-modes/block-flow-direction-004.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-htb-001.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-043.xht css-writing-modes/block-flow-direction-043-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-047.xht css-writing-modes/block-flow-direction-002-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-048.xht css-writing-modes/block-flow-direction-002-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-050.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-054.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-055.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-056.xht css-writing-modes/block-flow-direction-001-ref.xht
+fails == css-writing-modes/block-flow-direction-slr-058.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-060.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-062.xht css-writing-modes/block-flow-direction-043-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-063.xht css-writing-modes/block-flow-direction-043-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-slr-066.xht css-writing-modes/block-flow-direction-066-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-042.xht css-writing-modes/block-flow-direction-002-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-045.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-046.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-049.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-051.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-052.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-053.xht css-writing-modes/block-flow-direction-001-ref.xht
+fails == css-writing-modes/block-flow-direction-srl-057.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-059.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-061.xht css-writing-modes/block-flow-direction-002-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-064.xht css-writing-modes/block-flow-direction-002-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-srl-065.xht css-writing-modes/block-flow-direction-025-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-003.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-007.xht css-writing-modes/block-flow-direction-002-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-008.xht css-writing-modes/block-flow-direction-002-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-010.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-014.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-015.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-016.xht css-writing-modes/block-flow-direction-001-ref.xht
+fails == css-writing-modes/block-flow-direction-vlr-018.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-020.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-022.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vlr-023.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-002.xht css-writing-modes/block-flow-direction-002-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-005.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-006.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-009.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-011.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-012.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-013.xht css-writing-modes/block-flow-direction-001-ref.xht
+fails == css-writing-modes/block-flow-direction-vrl-017.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-019.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-021.xht css-writing-modes/block-flow-direction-002-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-024.xht css-writing-modes/block-flow-direction-002-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-025.xht css-writing-modes/block-flow-direction-025-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/block-flow-direction-vrl-026.xht css-writing-modes/block-flow-direction-vrl-026-ref.xht
+== css-writing-modes/block-override-001.html css-writing-modes/reference/block-override-001.html
+== css-writing-modes/block-override-002.html css-writing-modes/reference/block-override-002.html
+== css-writing-modes/block-override-003.html css-writing-modes/reference/block-override-003.html
+== css-writing-modes/block-override-004.html css-writing-modes/reference/block-override-004.html
+== css-writing-modes/block-override-isolate-001.html css-writing-modes/reference/block-override-isolate-001.html
+== css-writing-modes/block-override-isolate-002.html css-writing-modes/reference/block-override-isolate-002.html
+== css-writing-modes/block-override-isolate-003.html css-writing-modes/reference/block-override-isolate-003.html
+== css-writing-modes/block-override-isolate-004.html css-writing-modes/reference/block-override-isolate-004.html
+== css-writing-modes/block-plaintext-001.html css-writing-modes/reference/block-plaintext-001.html
+== css-writing-modes/block-plaintext-002.html css-writing-modes/reference/block-plaintext-002.html
+== css-writing-modes/block-plaintext-003.html css-writing-modes/reference/block-plaintext-003.html
+== css-writing-modes/block-plaintext-004.html css-writing-modes/reference/block-plaintext-004.html
+skip == css-writing-modes/block-plaintext-006.html css-writing-modes/reference/block-plaintext-006.html
+== css-writing-modes/border-conflict-element-vlr-003.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/border-conflict-element-vlr-005.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/border-conflict-element-vlr-007.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/border-conflict-element-vlr-009.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/border-conflict-element-vlr-011.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/border-conflict-element-vlr-013.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/border-conflict-element-vrl-002.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/border-conflict-element-vrl-004.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/border-conflict-element-vrl-006.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/border-conflict-element-vrl-008.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/border-conflict-element-vrl-010.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/border-conflict-element-vrl-012.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/border-spacing-vlr-003.xht css-writing-modes/border-spacing-vrl-002-ref.xht
+== css-writing-modes/border-spacing-vlr-005.xht css-writing-modes/border-spacing-vrl-002-ref.xht
+== css-writing-modes/border-spacing-vrl-002.xht css-writing-modes/border-spacing-vrl-002-ref.xht
+== css-writing-modes/border-spacing-vrl-004.xht css-writing-modes/border-spacing-vrl-002-ref.xht
+== css-writing-modes/border-vlr-007.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/border-vrl-006.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/box-offsets-rel-pos-vlr-003.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
+fuzzy-if(OSX,255,200) == css-writing-modes/box-offsets-rel-pos-vlr-005.xht css-writing-modes/box-offsets-rel-pos-vlr-005-ref.xht
+== css-writing-modes/box-offsets-rel-pos-vrl-002.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
+fuzzy-if(OSX,255,200) == css-writing-modes/box-offsets-rel-pos-vrl-004.xht css-writing-modes/box-offsets-rel-pos-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/caption-side-vlr-003.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/caption-side-vlr-005.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/caption-side-vrl-002.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/caption-side-vrl-004.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/central-baseline-alignment-002.xht css-writing-modes/central-baseline-alignment-002-ref.xht
+fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/central-baseline-alignment-003.xht css-writing-modes/central-baseline-alignment-002-ref.xht
+== css-writing-modes/clearance-calculations-vrl-002.xht css-writing-modes/clearance-calculations-vrl-002-ref.xht
+== css-writing-modes/clearance-calculations-vrl-004.xht css-writing-modes/clearance-calculations-vrl-004-ref.xht
+== css-writing-modes/clearance-calculations-vrl-006.xht css-writing-modes/clearance-calculations-vrl-006-ref.xht
+== css-writing-modes/clearance-calculations-vrl-008.xht css-writing-modes/clearance-calculations-vrl-008-ref.xht
+== css-writing-modes/clip-rect-vlr-003.xht css-writing-modes/clip-rect-vrl-002-ref.xht
+== css-writing-modes/clip-rect-vlr-005.xht css-writing-modes/clip-rect-vrl-004-ref.xht
+== css-writing-modes/clip-rect-vlr-007.xht css-writing-modes/clip-rect-vrl-006-ref.xht
+== css-writing-modes/clip-rect-vlr-009.xht css-writing-modes/clip-rect-vrl-008-ref.xht
+== css-writing-modes/clip-rect-vlr-011.xht css-writing-modes/clip-rect-vlr-011-ref.xht
+== css-writing-modes/clip-rect-vlr-013.xht css-writing-modes/clip-rect-vlr-013-ref.xht
+== css-writing-modes/clip-rect-vlr-015.xht css-writing-modes/clip-rect-vlr-015-ref.xht
+== css-writing-modes/clip-rect-vlr-017.xht css-writing-modes/clip-rect-vlr-017-ref.xht
+== css-writing-modes/clip-rect-vrl-002.xht css-writing-modes/clip-rect-vrl-002-ref.xht
+== css-writing-modes/clip-rect-vrl-004.xht css-writing-modes/clip-rect-vrl-004-ref.xht
+== css-writing-modes/clip-rect-vrl-006.xht css-writing-modes/clip-rect-vrl-006-ref.xht
+== css-writing-modes/clip-rect-vrl-008.xht css-writing-modes/clip-rect-vrl-008-ref.xht
+== css-writing-modes/clip-rect-vrl-010.xht css-writing-modes/clip-rect-vrl-010-ref.xht
+== css-writing-modes/clip-rect-vrl-012.xht css-writing-modes/clip-rect-vrl-012-ref.xht
+== css-writing-modes/clip-rect-vrl-014.xht css-writing-modes/clip-rect-vrl-014-ref.xht
+== css-writing-modes/clip-rect-vrl-016.xht css-writing-modes/clip-rect-vrl-016-ref.xht
+fails == css-writing-modes/contiguous-floated-table-vlr-003.xht reference/ref-filled-green-100px-square.xht
+fails == css-writing-modes/contiguous-floated-table-vlr-005.xht reference/ref-filled-green-100px-square.xht
+fails == css-writing-modes/contiguous-floated-table-vlr-007.xht reference/ref-filled-green-100px-square.xht
+fails == css-writing-modes/contiguous-floated-table-vlr-009.xht reference/ref-filled-green-100px-square.xht
+fails == css-writing-modes/contiguous-floated-table-vrl-002.xht reference/ref-filled-green-100px-square.xht
+fails == css-writing-modes/contiguous-floated-table-vrl-004.xht reference/ref-filled-green-100px-square.xht
+fails == css-writing-modes/contiguous-floated-table-vrl-006.xht reference/ref-filled-green-100px-square.xht
+fails == css-writing-modes/contiguous-floated-table-vrl-008.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/different-block-flow-dir-001.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/different-block-flow-dir-002.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/direction-vlr-003.xht css-writing-modes/direction-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/direction-vlr-005.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/direction-vrl-002.xht css-writing-modes/direction-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/direction-vrl-004.xht css-writing-modes/direction-vrl-004-ref.xht
+== css-writing-modes/flexbox_align-items-stretch-writing-modes.html css-writing-modes/flexbox_align-items-stretch-writing-modes-ref.html
+== css-writing-modes/float-clear-vlr-003.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/float-clear-vlr-005.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/float-clear-vlr-007.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/float-clear-vlr-009.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/float-clear-vrl-002.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/float-clear-vrl-004.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/float-clear-vrl-006.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/float-clear-vrl-008.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/float-contiguous-vlr-003.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
+== css-writing-modes/float-contiguous-vlr-005.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
+== css-writing-modes/float-contiguous-vlr-007.xht css-writing-modes/float-contiguous-vlr-007-ref.xht
+== css-writing-modes/float-contiguous-vlr-009.xht css-writing-modes/float-contiguous-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,135,902) == css-writing-modes/float-contiguous-vlr-011.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,135,902) == css-writing-modes/float-contiguous-vlr-013.xht css-writing-modes/float-contiguous-vrl-012-ref.xht
+== css-writing-modes/float-contiguous-vrl-002.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
+== css-writing-modes/float-contiguous-vrl-004.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
+== css-writing-modes/float-contiguous-vrl-006.xht css-writing-modes/float-contiguous-vrl-006-ref.xht
+== css-writing-modes/float-contiguous-vrl-008.xht css-writing-modes/float-contiguous-vrl-008-ref.xht
+fuzzy-if(OSX||winWidget,135,902) == css-writing-modes/float-contiguous-vrl-010.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,135,902) == css-writing-modes/float-contiguous-vrl-012.xht css-writing-modes/float-contiguous-vrl-012-ref.xht
+fails == css-writing-modes/float-lft-orthog-htb-in-vlr-002.xht css-writing-modes/float-lft-orthog-htb-in-vlr-002-ref.xht
+fails == css-writing-modes/float-lft-orthog-htb-in-vrl-002.xht css-writing-modes/float-lft-orthog-htb-in-vrl-002-ref.xht
+fails == css-writing-modes/float-lft-orthog-vlr-in-htb-002.xht css-writing-modes/float-lft-orthog-vlr-in-htb-002-ref.xht
+fails == css-writing-modes/float-lft-orthog-vrl-in-htb-002.xht css-writing-modes/float-lft-orthog-vrl-in-htb-002-ref.xht
+fails == css-writing-modes/float-rgt-orthog-htb-in-vlr-003.xht css-writing-modes/float-rgt-orthog-htb-in-vlr-003-ref.xht
+fails == css-writing-modes/float-rgt-orthog-htb-in-vrl-003.xht css-writing-modes/float-rgt-orthog-htb-in-vrl-003-ref.xht
+fails == css-writing-modes/float-rgt-orthog-vlr-in-htb-003.xht css-writing-modes/float-rgt-orthog-vlr-in-htb-003-ref.xht
+fails == css-writing-modes/float-rgt-orthog-vrl-in-htb-003.xht css-writing-modes/float-rgt-orthog-vrl-in-htb-003-ref.xht
+== css-writing-modes/float-shrink-to-fit-vlr-003.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/float-shrink-to-fit-vlr-005.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/float-shrink-to-fit-vlr-007.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-shrink-to-fit-vlr-009.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/float-shrink-to-fit-vrl-002.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/float-shrink-to-fit-vrl-004.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/float-shrink-to-fit-vrl-006.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-shrink-to-fit-vrl-008.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/float-shrink-to-fit-vrl-vlr-016.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vlr-003.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vlr-005.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vlr-007.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vlr-009.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vlr-011.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vlr-013.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vrl-002.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vrl-004.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vrl-006.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vrl-008.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vrl-010.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,93,300) == css-writing-modes/float-vrl-012.xht reference/ref-filled-green-100px-square.xht
+!= css-writing-modes/full-width-001.html css-writing-modes/reference/full-width-001-horizontal-notref.html
+!= css-writing-modes/full-width-001.html css-writing-modes/reference/full-width-001-nofullwidth-notref.html
+!= css-writing-modes/full-width-002.html css-writing-modes/reference/full-width-002-notcu-notref.html
+!= css-writing-modes/full-width-002.html css-writing-modes/reference/full-width-002-horizontal-notref.html
+skip != css-writing-modes/full-width-003.html css-writing-modes/reference/full-width-002-notcu-notref.html
+skip != css-writing-modes/full-width-003.html css-writing-modes/reference/full-width-002-horizontal-notref.html
+fuzzy-if(OSX||winWidget,62,404) fuzzy-if(webrender&&winWidget,92-92,100-100) == css-writing-modes/height-width-inline-non-replaced-vlr-003.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,62,404) fuzzy-if(webrender&&winWidget,92-92,100-100) == css-writing-modes/height-width-inline-non-replaced-vrl-002.xht css-writing-modes/abs-pos-non-replaced-icb-vrl-008-ref.xht
+== css-writing-modes/horizontal-rule-vlr-003.xht css-writing-modes/horizontal-rule-vlr-003-ref.xht
+== css-writing-modes/horizontal-rule-vlr-005.xht css-writing-modes/horizontal-rule-vrl-004-ref.xht
+== css-writing-modes/horizontal-rule-vrl-002.xht css-writing-modes/horizontal-rule-vrl-002-ref.xht
+== css-writing-modes/horizontal-rule-vrl-004.xht css-writing-modes/horizontal-rule-vrl-004-ref.xht
+fails == css-writing-modes/inline-block-alignment-002.xht css-writing-modes/inline-block-alignment-002-ref.xht
+fails == css-writing-modes/inline-block-alignment-003.xht css-writing-modes/inline-block-alignment-003-ref.xht
+fails == css-writing-modes/inline-block-alignment-004.xht css-writing-modes/inline-block-alignment-002-ref.xht
+fails == css-writing-modes/inline-block-alignment-005.xht css-writing-modes/inline-block-alignment-003-ref.xht
+fuzzy-if(OSX||winWidget,111,960) == css-writing-modes/inline-block-alignment-006.xht css-writing-modes/inline-block-alignment-006-ref.xht
+fails == css-writing-modes/inline-block-alignment-007.xht css-writing-modes/inline-block-alignment-006-ref.xht
+fuzzy-if(OSX||winWidget,218,621) == css-writing-modes/inline-block-alignment-orthogonal-vlr-003.xht css-writing-modes/inline-block-alignment-orthogonal-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,218,621) == css-writing-modes/inline-block-alignment-orthogonal-vlr-005.xht css-writing-modes/inline-block-alignment-orthogonal-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,218,621) == css-writing-modes/inline-block-alignment-orthogonal-vrl-002.xht css-writing-modes/inline-block-alignment-orthogonal-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,218,621) == css-writing-modes/inline-block-alignment-orthogonal-vrl-004.xht css-writing-modes/inline-block-alignment-orthogonal-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,135,1080) == css-writing-modes/inline-block-alignment-slr-009.xht css-writing-modes/inline-block-alignment-slr-009-ref.xht
+fuzzy-if(OSX||winWidget,111,960) == css-writing-modes/inline-block-alignment-srl-008.xht css-writing-modes/inline-block-alignment-006-ref.xht
+== css-writing-modes/inline-replaced-vlr-003.xht css-writing-modes/inline-replaced-vrl-002-ref.xht
+== css-writing-modes/inline-replaced-vlr-005.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
+== css-writing-modes/inline-replaced-vrl-002.xht css-writing-modes/inline-replaced-vrl-002-ref.xht
+== css-writing-modes/inline-replaced-vrl-004.xht css-writing-modes/inline-replaced-vrl-004-ref.xht
+fails == css-writing-modes/inline-table-alignment-002.xht css-writing-modes/inline-table-alignment-002-ref.xht
+fails == css-writing-modes/inline-table-alignment-003.xht css-writing-modes/inline-table-alignment-003-ref.xht
+fails == css-writing-modes/inline-table-alignment-004.xht css-writing-modes/inline-table-alignment-002-ref.xht
+fails == css-writing-modes/inline-table-alignment-005.xht css-writing-modes/inline-table-alignment-003-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-htb-001.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-043.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-047.xht css-writing-modes/block-flow-direction-002-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-048.xht css-writing-modes/block-flow-direction-002-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-050.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-053.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-054.xht css-writing-modes/block-flow-direction-001-ref.xht
+random == css-writing-modes/line-box-direction-slr-056.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-058.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-slr-060.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-042.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-045.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-046.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-049.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-051.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-052.xht css-writing-modes/block-flow-direction-001-ref.xht
+random == css-writing-modes/line-box-direction-srl-055.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-057.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-srl-059.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-003.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-007.xht css-writing-modes/block-flow-direction-002-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-008.xht css-writing-modes/block-flow-direction-002-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-010.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-013.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-014.xht css-writing-modes/block-flow-direction-001-ref.xht
+random == css-writing-modes/line-box-direction-vlr-016.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-018.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vlr-020.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-002.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-005.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-006.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-009.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-011.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-012.xht css-writing-modes/block-flow-direction-001-ref.xht
+random == css-writing-modes/line-box-direction-vrl-015.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-017.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,213,1540) == css-writing-modes/line-box-direction-vrl-019.xht css-writing-modes/block-flow-direction-001-ref.xht
+fails == css-writing-modes/line-box-height-vlr-003.xht css-writing-modes/line-box-height-vlr-003-ref.xht
+fails == css-writing-modes/line-box-height-vlr-005.xht css-writing-modes/line-box-height-vlr-003-ref.xht
+== css-writing-modes/line-box-height-vlr-007.xht css-writing-modes/line-box-height-vlr-007-ref.xht
+== css-writing-modes/line-box-height-vlr-009.xht css-writing-modes/line-box-height-vlr-007-ref.xht
+fails == css-writing-modes/line-box-height-vlr-011.xht css-writing-modes/line-box-height-vlr-011-ref.xht
+fails == css-writing-modes/line-box-height-vlr-013.xht css-writing-modes/line-box-height-vlr-011-ref.xht
+fails == css-writing-modes/line-box-height-vlr-021.xht css-writing-modes/line-box-height-vlr-021-ref.xht
+fails == css-writing-modes/line-box-height-vlr-023.xht css-writing-modes/line-box-height-vlr-023-ref.xht
+fails == css-writing-modes/line-box-height-vrl-002.xht css-writing-modes/line-box-height-vrl-002-ref.xht
+fails == css-writing-modes/line-box-height-vrl-004.xht css-writing-modes/line-box-height-vrl-002-ref.xht
+== css-writing-modes/line-box-height-vrl-006.xht css-writing-modes/line-box-height-vrl-006-ref.xht
+== css-writing-modes/line-box-height-vrl-008.xht css-writing-modes/line-box-height-vrl-006-ref.xht
+fails == css-writing-modes/line-box-height-vrl-010.xht css-writing-modes/line-box-height-vrl-010-ref.xht
+fails == css-writing-modes/line-box-height-vrl-012.xht css-writing-modes/line-box-height-vrl-010-ref.xht
+== css-writing-modes/margin-collapse-vlr-003.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vlr-009.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vlr-011.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vlr-015.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vlr-017.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vlr-025.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vlr-031.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vlr-035.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vlr-037.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vrl-002.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vrl-008.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vrl-010.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vrl-014.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vrl-016.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vrl-024.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vrl-030.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vrl-034.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-collapse-vrl-036.xht reference/ref-filled-green-100px-square.xht
+== css-writing-modes/margin-vlr-003.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/margin-vrl-002.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/normal-flow-overconstrained-vlr-003.xht css-writing-modes/abs-pos-non-replaced-vlr-007-ref.xht
+== css-writing-modes/normal-flow-overconstrained-vlr-005.xht css-writing-modes/abs-pos-non-replaced-vlr-013-ref.xht
+== css-writing-modes/normal-flow-overconstrained-vrl-002.xht css-writing-modes/abs-pos-non-replaced-vrl-006-ref.xht
+== css-writing-modes/normal-flow-overconstrained-vrl-004.xht css-writing-modes/abs-pos-non-replaced-vrl-012-ref.xht
+== css-writing-modes/ortho-htb-alongside-vrl-floats-002.xht css-writing-modes/ortho-htb-alongside-vrl-floats-002-ref.xht
+== css-writing-modes/ortho-htb-alongside-vrl-floats-006.xht css-writing-modes/ortho-htb-alongside-vrl-floats-006-ref.xht
+== css-writing-modes/ortho-htb-alongside-vrl-floats-010.xht css-writing-modes/ortho-htb-alongside-vrl-floats-010-ref.xht
+== css-writing-modes/ortho-htb-alongside-vrl-floats-014.xht css-writing-modes/ortho-htb-alongside-vrl-floats-014-ref.xht
+== css-writing-modes/outline-inline-block-vrl-006.html css-writing-modes/reference/outline-inline-block-vrl-006.html
+== css-writing-modes/outline-inline-vlr-006.html css-writing-modes/reference/outline-inline-vlr-006.html
+== css-writing-modes/outline-inline-vrl-006.html css-writing-modes/reference/outline-inline-vrl-006.html
+== css-writing-modes/overconstrained-rel-pos-ltr-left-right-vlr-005.xht css-writing-modes/overconstrained-rel-pos-ltr-left-right-vlr-005-ref.xht
+== css-writing-modes/overconstrained-rel-pos-ltr-left-right-vrl-004.xht css-writing-modes/overconstrained-rel-pos-ltr-left-right-vrl-004-ref.xht
+== css-writing-modes/overconstrained-rel-pos-ltr-top-bottom-vlr-003.xht css-writing-modes/overconstrained-rel-pos-ltr-top-bottom-vlr-003-ref.xht
+== css-writing-modes/overconstrained-rel-pos-ltr-top-bottom-vrl-002.xht css-writing-modes/overconstrained-rel-pos-ltr-top-bottom-vrl-002-ref.xht
+== css-writing-modes/overconstrained-rel-pos-rtl-left-right-vlr-009.xht css-writing-modes/overconstrained-rel-pos-rtl-left-right-vlr-009-ref.xht
+== css-writing-modes/overconstrained-rel-pos-rtl-left-right-vrl-008.xht css-writing-modes/overconstrained-rel-pos-rtl-left-right-vrl-008-ref.xht
+== css-writing-modes/overconstrained-rel-pos-rtl-top-bottom-vlr-007.xht css-writing-modes/overconstrained-rel-pos-rtl-top-bottom-vlr-007-ref.xht
+== css-writing-modes/overconstrained-rel-pos-rtl-top-bottom-vrl-006.xht css-writing-modes/overconstrained-rel-pos-rtl-top-bottom-vrl-006-ref.xht
+== css-writing-modes/padding-vlr-005.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/padding-vrl-004.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/percent-margin-vlr-003.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/percent-margin-vlr-005.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/percent-margin-vlr-007.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/percent-margin-vrl-002.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/percent-margin-vrl-004.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/percent-margin-vrl-006.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/percent-padding-vlr-003.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/percent-padding-vlr-005.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/percent-padding-vlr-007.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/percent-padding-vrl-002.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/percent-padding-vrl-004.xht css-writing-modes/margin-vrl-002-ref.xht
+== css-writing-modes/percent-padding-vrl-006.xht css-writing-modes/margin-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-slr-023.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-slr-029.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-srl-022.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-srl-028.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vlr-003.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vlr-005.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vlr-007.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vlr-009.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vrl-002.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vrl-004.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vrl-006.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/row-progression-vrl-008.xht css-writing-modes/block-flow-direction-001-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vlr-001.xht css-writing-modes/sizing-orthog-htb-in-vlr-001-ref.xht
+fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vlr-003.xht css-writing-modes/sizing-orthog-htb-in-vlr-003-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vlr-004.xht css-writing-modes/sizing-orthog-htb-in-vlr-004-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vlr-006.xht css-writing-modes/sizing-orthog-htb-in-vlr-006-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vlr-007.xht css-writing-modes/sizing-orthog-htb-in-vlr-007-ref.xht
+fails-if(OSX||winWidget||Android) == css-writing-modes/sizing-orthog-htb-in-vlr-008.xht css-writing-modes/sizing-orthog-htb-in-vlr-008-ref.xht
+fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vlr-009.xht css-writing-modes/sizing-orthog-htb-in-vlr-003-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vlr-010.xht css-writing-modes/sizing-orthog-htb-in-vlr-010-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vlr-011.xht css-writing-modes/sizing-orthog-htb-in-vlr-011-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vlr-012.xht css-writing-modes/sizing-orthog-htb-in-vlr-006-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vlr-013.xht css-writing-modes/sizing-orthog-htb-in-vlr-013-ref.xht
+fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vlr-015.xht css-writing-modes/sizing-orthog-htb-in-vlr-015-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vlr-016.xht css-writing-modes/sizing-orthog-htb-in-vlr-016-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vlr-018.xht css-writing-modes/sizing-orthog-htb-in-vlr-018-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vlr-019.xht css-writing-modes/sizing-orthog-htb-in-vlr-019-ref.xht
+fails-if(OSX||winWidget||Android) == css-writing-modes/sizing-orthog-htb-in-vlr-020.xht css-writing-modes/sizing-orthog-htb-in-vlr-020-ref.xht
+fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vlr-021.xht css-writing-modes/sizing-orthog-htb-in-vlr-015-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vlr-022.xht css-writing-modes/sizing-orthog-htb-in-vlr-022-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vlr-023.xht css-writing-modes/sizing-orthog-htb-in-vlr-023-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vlr-024.xht css-writing-modes/sizing-orthog-htb-in-vlr-018-ref.xht
+fails == css-writing-modes/sizing-orthog-htb-in-vrl-001.xht css-writing-modes/sizing-orthog-htb-in-vrl-001-ref.xht
+fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vrl-003.xht css-writing-modes/sizing-orthog-htb-in-vrl-003-ref.xht
+fails == css-writing-modes/sizing-orthog-htb-in-vrl-004.xht css-writing-modes/sizing-orthog-htb-in-vlr-004-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vrl-006.xht css-writing-modes/sizing-orthog-htb-in-vrl-006-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vrl-007.xht css-writing-modes/sizing-orthog-htb-in-vrl-007-ref.xht
+fails-if(OSX||winWidget||Android) == css-writing-modes/sizing-orthog-htb-in-vrl-008.xht css-writing-modes/sizing-orthog-htb-in-vrl-008-ref.xht
+fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vrl-009.xht css-writing-modes/sizing-orthog-htb-in-vrl-003-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vrl-010.xht css-writing-modes/sizing-orthog-htb-in-vrl-010-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vrl-011.xht css-writing-modes/sizing-orthog-htb-in-vrl-011-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vrl-012.xht css-writing-modes/sizing-orthog-htb-in-vrl-006-ref.xht
+fails == css-writing-modes/sizing-orthog-htb-in-vrl-013.xht css-writing-modes/sizing-orthog-htb-in-vrl-013-ref.xht
+fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vrl-015.xht css-writing-modes/sizing-orthog-htb-in-vrl-015-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vrl-016.xht css-writing-modes/sizing-orthog-htb-in-vlr-016-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vrl-018.xht css-writing-modes/sizing-orthog-htb-in-vrl-018-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vrl-019.xht css-writing-modes/sizing-orthog-htb-in-vrl-019-ref.xht
+fails-if(OSX||winWidget||Android) == css-writing-modes/sizing-orthog-htb-in-vrl-020.xht css-writing-modes/sizing-orthog-htb-in-vrl-020-ref.xht
+fails-if(Android) == css-writing-modes/sizing-orthog-htb-in-vrl-021.xht css-writing-modes/sizing-orthog-htb-in-vrl-015-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vrl-022.xht css-writing-modes/sizing-orthog-htb-in-vrl-022-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vrl-023.xht css-writing-modes/sizing-orthog-htb-in-vrl-023-ref.xht
+== css-writing-modes/sizing-orthog-htb-in-vrl-024.xht css-writing-modes/sizing-orthog-htb-in-vrl-018-ref.xht
+== css-writing-modes/sizing-orthog-prct-htb-in-vlr-001.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-001-ref.xht
+== css-writing-modes/sizing-orthog-prct-htb-in-vlr-002.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-002-ref.xht
+== css-writing-modes/sizing-orthog-prct-htb-in-vlr-003.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-003-ref.xht
+== css-writing-modes/sizing-orthog-prct-htb-in-vlr-004.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-004-ref.xht
+== css-writing-modes/sizing-orthog-prct-htb-in-vlr-005.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-005-ref.xht
+== css-writing-modes/sizing-orthog-prct-htb-in-vlr-006.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-006-ref.xht
+== css-writing-modes/sizing-orthog-prct-htb-in-vlr-007.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-007-ref.xht
+== css-writing-modes/sizing-orthog-prct-htb-in-vlr-008.xht css-writing-modes/sizing-orthog-prct-htb-in-vlr-008-ref.xht
+== css-writing-modes/sizing-orthog-prct-htb-in-vrl-001.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-001-ref.xht
+== css-writing-modes/sizing-orthog-prct-htb-in-vrl-002.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-002-ref.xht
+== css-writing-modes/sizing-orthog-prct-htb-in-vrl-003.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-003-ref.xht
+== css-writing-modes/sizing-orthog-prct-htb-in-vrl-004.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-004-ref.xht
+== css-writing-modes/sizing-orthog-prct-htb-in-vrl-005.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-005-ref.xht
+== css-writing-modes/sizing-orthog-prct-htb-in-vrl-006.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-006-ref.xht
+== css-writing-modes/sizing-orthog-prct-htb-in-vrl-007.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-007-ref.xht
+== css-writing-modes/sizing-orthog-prct-htb-in-vrl-008.xht css-writing-modes/sizing-orthog-prct-htb-in-vrl-008-ref.xht
+== css-writing-modes/sizing-orthog-prct-vlr-in-htb-001.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-001-ref.xht
+== css-writing-modes/sizing-orthog-prct-vlr-in-htb-002.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-002-ref.xht
+== css-writing-modes/sizing-orthog-prct-vlr-in-htb-003.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-003-ref.xht
+== css-writing-modes/sizing-orthog-prct-vlr-in-htb-004.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-004-ref.xht
+== css-writing-modes/sizing-orthog-prct-vlr-in-htb-005.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-005-ref.xht
+== css-writing-modes/sizing-orthog-prct-vlr-in-htb-006.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-006-ref.xht
+== css-writing-modes/sizing-orthog-prct-vlr-in-htb-007.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-007-ref.xht
+== css-writing-modes/sizing-orthog-prct-vlr-in-htb-008.xht css-writing-modes/sizing-orthog-prct-vlr-in-htb-008-ref.xht
+== css-writing-modes/sizing-orthog-prct-vrl-in-htb-001.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-001-ref.xht
+== css-writing-modes/sizing-orthog-prct-vrl-in-htb-002.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-002-ref.xht
+== css-writing-modes/sizing-orthog-prct-vrl-in-htb-003.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-003-ref.xht
+== css-writing-modes/sizing-orthog-prct-vrl-in-htb-004.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-004-ref.xht
+== css-writing-modes/sizing-orthog-prct-vrl-in-htb-005.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-005-ref.xht
+== css-writing-modes/sizing-orthog-prct-vrl-in-htb-006.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-006-ref.xht
+== css-writing-modes/sizing-orthog-prct-vrl-in-htb-007.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-007-ref.xht
+== css-writing-modes/sizing-orthog-prct-vrl-in-htb-008.xht css-writing-modes/sizing-orthog-prct-vrl-in-htb-008-ref.xht
+== css-writing-modes/sizing-orthog-vlr-in-htb-001.xht css-writing-modes/sizing-orthog-vlr-in-htb-001-ref.xht
+fails-if(Android) == css-writing-modes/sizing-orthog-vlr-in-htb-003.xht css-writing-modes/sizing-orthog-vlr-in-htb-003-ref.xht
+== css-writing-modes/sizing-orthog-vlr-in-htb-004.xht css-writing-modes/sizing-orthog-vlr-in-htb-004-ref.xht
+== css-writing-modes/sizing-orthog-vlr-in-htb-006.xht css-writing-modes/sizing-orthog-vlr-in-htb-006-ref.xht
+== css-writing-modes/sizing-orthog-vlr-in-htb-007.xht css-writing-modes/sizing-orthog-vlr-in-htb-007-ref.xht
+== css-writing-modes/sizing-orthog-vlr-in-htb-008.xht css-writing-modes/sizing-orthog-vlr-in-htb-008-ref.xht
+fails-if(Android) == css-writing-modes/sizing-orthog-vlr-in-htb-009.xht css-writing-modes/sizing-orthog-vlr-in-htb-009-ref.xht
+== css-writing-modes/sizing-orthog-vlr-in-htb-010.xht css-writing-modes/sizing-orthog-vlr-in-htb-010-ref.xht
+== css-writing-modes/sizing-orthog-vlr-in-htb-011.xht css-writing-modes/sizing-orthog-vlr-in-htb-011-ref.xht
+== css-writing-modes/sizing-orthog-vlr-in-htb-012.xht css-writing-modes/sizing-orthog-vlr-in-htb-012-ref.xht
+== css-writing-modes/sizing-orthog-vlr-in-htb-013.xht css-writing-modes/sizing-orthog-vlr-in-htb-013-ref.xht
+fails-if(Android) == css-writing-modes/sizing-orthog-vlr-in-htb-015.xht css-writing-modes/sizing-orthog-vlr-in-htb-015-ref.xht
+== css-writing-modes/sizing-orthog-vlr-in-htb-016.xht css-writing-modes/sizing-orthog-vlr-in-htb-016-ref.xht
+== css-writing-modes/sizing-orthog-vlr-in-htb-018.xht css-writing-modes/sizing-orthog-vlr-in-htb-018-ref.xht
+== css-writing-modes/sizing-orthog-vlr-in-htb-019.xht css-writing-modes/sizing-orthog-vlr-in-htb-019-ref.xht
+== css-writing-modes/sizing-orthog-vlr-in-htb-020.xht css-writing-modes/sizing-orthog-vlr-in-htb-020-ref.xht
+fails-if(Android) == css-writing-modes/sizing-orthog-vlr-in-htb-021.xht css-writing-modes/sizing-orthog-vlr-in-htb-015-ref.xht
+== css-writing-modes/sizing-orthog-vlr-in-htb-022.xht css-writing-modes/sizing-orthog-vlr-in-htb-022-ref.xht
+== css-writing-modes/sizing-orthog-vlr-in-htb-023.xht css-writing-modes/sizing-orthog-vlr-in-htb-023-ref.xht
+== css-writing-modes/sizing-orthog-vlr-in-htb-024.xht css-writing-modes/sizing-orthog-vlr-in-htb-018-ref.xht
+== css-writing-modes/sizing-orthog-vrl-in-htb-001.xht css-writing-modes/sizing-orthog-vrl-in-htb-001-ref.xht
+fails-if(Android) == css-writing-modes/sizing-orthog-vrl-in-htb-003.xht css-writing-modes/sizing-orthog-vrl-in-htb-003-ref.xht
+== css-writing-modes/sizing-orthog-vrl-in-htb-004.xht css-writing-modes/sizing-orthog-vrl-in-htb-004-ref.xht
+== css-writing-modes/sizing-orthog-vrl-in-htb-006.xht css-writing-modes/sizing-orthog-vrl-in-htb-006-ref.xht
+== css-writing-modes/sizing-orthog-vrl-in-htb-007.xht css-writing-modes/sizing-orthog-vrl-in-htb-007-ref.xht
+== css-writing-modes/sizing-orthog-vrl-in-htb-008.xht css-writing-modes/sizing-orthog-vrl-in-htb-008-ref.xht
+fails-if(Android) == css-writing-modes/sizing-orthog-vrl-in-htb-009.xht css-writing-modes/sizing-orthog-vrl-in-htb-009-ref.xht
+== css-writing-modes/sizing-orthog-vrl-in-htb-010.xht css-writing-modes/sizing-orthog-vrl-in-htb-010-ref.xht
+== css-writing-modes/sizing-orthog-vrl-in-htb-011.xht css-writing-modes/sizing-orthog-vrl-in-htb-011-ref.xht
+== css-writing-modes/sizing-orthog-vrl-in-htb-012.xht css-writing-modes/sizing-orthog-vrl-in-htb-012-ref.xht
+== css-writing-modes/sizing-orthog-vrl-in-htb-013.xht css-writing-modes/sizing-orthog-vrl-in-htb-013-ref.xht
+fails-if(Android) == css-writing-modes/sizing-orthog-vrl-in-htb-015.xht css-writing-modes/sizing-orthog-vrl-in-htb-015-ref.xht
+== css-writing-modes/sizing-orthog-vrl-in-htb-016.xht css-writing-modes/sizing-orthog-vrl-in-htb-016-ref.xht
+== css-writing-modes/sizing-orthog-vrl-in-htb-018.xht css-writing-modes/sizing-orthog-vrl-in-htb-018-ref.xht
+== css-writing-modes/sizing-orthog-vrl-in-htb-019.xht css-writing-modes/sizing-orthog-vrl-in-htb-019-ref.xht
+== css-writing-modes/sizing-orthog-vrl-in-htb-020.xht css-writing-modes/sizing-orthog-vrl-in-htb-020-ref.xht
+fails-if(Android) == css-writing-modes/sizing-orthog-vrl-in-htb-021.xht css-writing-modes/sizing-orthog-vrl-in-htb-015-ref.xht
+== css-writing-modes/sizing-orthog-vrl-in-htb-022.xht css-writing-modes/sizing-orthog-vrl-in-htb-022-ref.xht
+== css-writing-modes/sizing-orthog-vrl-in-htb-023.xht css-writing-modes/sizing-orthog-vrl-in-htb-023-ref.xht
+== css-writing-modes/sizing-orthog-vrl-in-htb-024.xht css-writing-modes/sizing-orthog-vrl-in-htb-018-ref.xht
+skip == css-writing-modes/table-cell-001.html css-writing-modes/reference/table-cell-001-ref.html
+skip == css-writing-modes/table-cell-002.html css-writing-modes/reference/table-cell-002-ref.html
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-002.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-003.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-004.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-005.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(winWidget,110,1200) == css-writing-modes/table-column-order-slr-007.xht css-writing-modes/block-flow-direction-001-ref.xht
+fuzzy-if(OSX||winWidget,110,1200) == css-writing-modes/table-column-order-srl-006.xht css-writing-modes/block-flow-direction-001-ref.xht
+== css-writing-modes/table-progression-slr-001.html css-writing-modes/table-progression-slr-001-ref.html
+fails == css-writing-modes/table-progression-slr-002.html css-writing-modes/table-progression-002-ref.html
+== css-writing-modes/table-progression-srl-001.html css-writing-modes/table-progression-001-ref.html
+fails == css-writing-modes/table-progression-srl-002.html css-writing-modes/table-progression-002-ref.html
+== css-writing-modes/table-progression-vlr-001.html css-writing-modes/table-progression-001-ref.html
+fails == css-writing-modes/table-progression-vlr-002.html css-writing-modes/table-progression-002-ref.html
+fails == css-writing-modes/table-progression-vlr-003.html css-writing-modes/table-progression-001-ref.html
+fails == css-writing-modes/table-progression-vlr-004.html css-writing-modes/table-progression-002-ref.html
+== css-writing-modes/table-progression-vrl-001.html css-writing-modes/table-progression-001-ref.html
+fails == css-writing-modes/table-progression-vrl-002.html css-writing-modes/table-progression-002-ref.html
+fails == css-writing-modes/table-progression-vrl-003.html css-writing-modes/table-progression-001-ref.html
+fails == css-writing-modes/table-progression-vrl-004.html css-writing-modes/table-progression-002-ref.html
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-003.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-005.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-007.xht reference/ref-filled-green-100px-square.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-009.xht css-writing-modes/text-align-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-011.xht css-writing-modes/text-align-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-013.xht css-writing-modes/text-align-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-015.xht css-writing-modes/direction-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-017.xht css-writing-modes/direction-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vlr-019.xht css-writing-modes/direction-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-002.xht css-writing-modes/direction-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-004.xht css-writing-modes/direction-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-006.xht css-writing-modes/direction-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-008.xht css-writing-modes/text-align-vrl-008-ref.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-010.xht css-writing-modes/text-align-vrl-008-ref.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-012.xht css-writing-modes/text-align-vrl-008-ref.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-014.xht css-writing-modes/direction-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-016.xht css-writing-modes/direction-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,75,404) fuzzy-if(webrender&&winWidget,92-92,300-300) == css-writing-modes/text-align-vrl-018.xht css-writing-modes/direction-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-slr-009.xht css-writing-modes/text-baseline-slr-009-ref.xht
+fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-srl-008.xht css-writing-modes/text-baseline-vrl-006-ref.xht
+fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vlr-003.xht css-writing-modes/text-baseline-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vlr-005.xht css-writing-modes/text-baseline-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vlr-007.xht css-writing-modes/text-baseline-vrl-006-ref.xht
+fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vrl-002.xht css-writing-modes/text-baseline-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vrl-004.xht css-writing-modes/text-baseline-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,215,780) == css-writing-modes/text-baseline-vrl-006.xht css-writing-modes/text-baseline-vrl-006-ref.xht
+fuzzy-if(OSX,15,16) == css-writing-modes/text-combine-upright-decorations-001.html css-writing-modes/reference/text-combine-upright-decorations-001.html
+== css-writing-modes/text-combine-upright-inherit-all-001.html css-writing-modes/reference/text-combine-upright-inherit-all-001.html
+== css-writing-modes/text-combine-upright-inherit-all-002.html css-writing-modes/reference/text-combine-upright-inherit-all-002.html
+== css-writing-modes/text-combine-upright-layout-rules-001.html css-writing-modes/reference/text-combine-upright-layout-rules-001-ref.html
+== css-writing-modes/text-combine-upright-line-breaking-rules-001.html css-writing-modes/text-combine-upright-line-breaking-rules-001-ref.html
+fuzzy(255,960) == css-writing-modes/text-combine-upright-value-all-001.html css-writing-modes/reference/text-combine-upright-value-single-character.html
+fuzzy(255,960) == css-writing-modes/text-combine-upright-value-all-002.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
+fuzzy(255,960) != css-writing-modes/text-combine-upright-value-all-002.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
+fuzzy(255,960) == css-writing-modes/text-combine-upright-value-all-003.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
+fuzzy(255,960) != css-writing-modes/text-combine-upright-value-all-003.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
+skip == css-writing-modes/text-combine-upright-value-digits2-001.html css-writing-modes/reference/text-combine-upright-value-single-character.html
+skip == css-writing-modes/text-combine-upright-value-digits2-002.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
+skip != css-writing-modes/text-combine-upright-value-digits2-002.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
+== css-writing-modes/text-combine-upright-value-digits2-003.html css-writing-modes/reference/vertical-ahem-1x3-ref.html
+!= css-writing-modes/text-combine-upright-value-digits2-003.html css-writing-modes/reference/horizontal-ahem-1x3-notref.html
+skip == css-writing-modes/text-combine-upright-value-digits3-001.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
+skip != css-writing-modes/text-combine-upright-value-digits3-001.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
+skip == css-writing-modes/text-combine-upright-value-digits3-002.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
+skip != css-writing-modes/text-combine-upright-value-digits3-002.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
+== css-writing-modes/text-combine-upright-value-digits3-003.html css-writing-modes/reference/vertical-ahem-1x4-ref.html
+!= css-writing-modes/text-combine-upright-value-digits3-003.html css-writing-modes/reference/horizontal-ahem-1x4-notref.html
+skip == css-writing-modes/text-combine-upright-value-digits4-001.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
+skip != css-writing-modes/text-combine-upright-value-digits4-001.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
+skip == css-writing-modes/text-combine-upright-value-digits4-002.html css-writing-modes/reference/vertical-ahem-1x1-ref.html
+skip != css-writing-modes/text-combine-upright-value-digits4-002.html css-writing-modes/reference/horizontal-ahem-1x1-notref.html
+== css-writing-modes/text-combine-upright-value-digits4-003.html css-writing-modes/reference/vertical-ahem-1x5-ref.html
+!= css-writing-modes/text-combine-upright-value-digits4-003.html css-writing-modes/reference/horizontal-ahem-1x5-notref.html
+== css-writing-modes/text-combine-upright-value-none-001.html css-writing-modes/reference/vertical-ahem-1x3-ref.html
+!= css-writing-modes/text-combine-upright-value-none-001.html css-writing-modes/reference/horizontal-ahem-1x3-notref.html
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-003.xht css-writing-modes/text-indent-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-005.xht css-writing-modes/text-indent-vlr-005-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-007.xht css-writing-modes/text-indent-vlr-003-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-009.xht css-writing-modes/text-indent-vlr-005-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-011.xht css-writing-modes/text-indent-vlr-011-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-013.xht css-writing-modes/text-indent-vlr-013-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-015.xht css-writing-modes/text-indent-vlr-011-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vlr-017.xht css-writing-modes/text-indent-vlr-013-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-002.xht css-writing-modes/text-indent-vrl-002-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-004.xht css-writing-modes/text-indent-vrl-004-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-006.xht css-writing-modes/abs-pos-non-replaced-vlr-009-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-008.xht css-writing-modes/text-indent-vrl-008-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-010.xht css-writing-modes/text-indent-vrl-010-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-012.xht css-writing-modes/text-indent-vrl-012-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-014.xht css-writing-modes/text-indent-vrl-010-ref.xht
+fuzzy-if(OSX||winWidget,255,480) == css-writing-modes/text-indent-vrl-016.xht css-writing-modes/text-indent-vrl-012-ref.xht
+fuzzy-if(OSX||winWidget,226,960) == css-writing-modes/text-orientation-016.xht css-writing-modes/text-orientation-016-ref.xht
+== css-writing-modes/text-orientation-mixed-srl-016.xht css-writing-modes/text-orientation-mixed-srl-016-ref.xht
+== css-writing-modes/text-orientation-mixed-vlr-100.html css-writing-modes/text-orientation-mixed-vlr-100-ref.html
+== css-writing-modes/text-orientation-mixed-vrl-100.html css-writing-modes/text-orientation-mixed-vrl-100-ref.html
+== css-writing-modes/text-orientation-sideways-vlr-100.html css-writing-modes/text-orientation-sideways-vlr-100-ref.html
+== css-writing-modes/text-orientation-sideways-vrl-100.html css-writing-modes/text-orientation-sideways-vrl-100-ref.html
+== css-writing-modes/text-orientation-upright-srl-018.xht css-writing-modes/text-orientation-mixed-srl-016-ref.xht
+== css-writing-modes/text-orientation-upright-vlr-100.html css-writing-modes/text-orientation-upright-vlr-100-ref.html
+== css-writing-modes/text-orientation-upright-vrl-100.html css-writing-modes/text-orientation-upright-vrl-100-ref.html
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-002.xht css-writing-modes/vertical-alignment-002-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-003.xht css-writing-modes/vertical-alignment-002-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-004.xht css-writing-modes/vertical-alignment-004-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-005.xht css-writing-modes/vertical-alignment-004-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-006.xht css-writing-modes/vertical-alignment-006-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-007.xht css-writing-modes/vertical-alignment-006-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-008.xht css-writing-modes/vertical-alignment-008-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-009.xht css-writing-modes/vertical-alignment-008-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-slr-029.xht css-writing-modes/vertical-alignment-008-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-slr-031.xht css-writing-modes/vertical-alignment-006-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-slr-033.xht css-writing-modes/vertical-alignment-004-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-slr-035.xht css-writing-modes/vertical-alignment-002-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-slr-041.xht css-writing-modes/vertical-alignment-slr-049-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-srl-028.xht css-writing-modes/vertical-alignment-002-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-srl-030.xht css-writing-modes/vertical-alignment-004-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-srl-032.xht css-writing-modes/vertical-alignment-006-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-srl-034.xht css-writing-modes/vertical-alignment-008-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-srl-040.xht css-writing-modes/vertical-alignment-vrl-026-ref.xht
+fails == css-writing-modes/vertical-alignment-vlr-023.xht css-writing-modes/vertical-alignment-vrl-022-ref.xht
+fails == css-writing-modes/vertical-alignment-vlr-025.xht css-writing-modes/vertical-alignment-vrl-022-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-vlr-027.xht css-writing-modes/vertical-alignment-vrl-026-ref.xht
+fails == css-writing-modes/vertical-alignment-vrl-022.xht css-writing-modes/vertical-alignment-vrl-022-ref.xht
+fails == css-writing-modes/vertical-alignment-vrl-024.xht css-writing-modes/vertical-alignment-vrl-022-ref.xht
+fuzzy-if(OSX||winWidget,223,720) == css-writing-modes/vertical-alignment-vrl-026.xht css-writing-modes/vertical-alignment-vrl-026-ref.xht
+fails == css-writing-modes/wm-propagation-body-006.xht css-writing-modes/block-flow-direction-025-ref.xht
+fails == css-writing-modes/wm-propagation-body-008.xht css-writing-modes/block-flow-direction-025-ref.xht
+fails == css-writing-modes/wm-propagation-body-010.xht css-writing-modes/wm-propagation-body-003-ref.xht
+fails == css-writing-modes/wm-propagation-body-011.xht css-writing-modes/wm-propagation-body-003-ref.xht
+fails == css-writing-modes/wm-propagation-body-015.xht css-writing-modes/block-flow-direction-025-ref.xht
+== css-writing-modes/writing-mode-horizontal-001l.html css-writing-modes/reference/writing-mode-horizontal-001l-ref.html
+== css-writing-modes/writing-mode-horizontal-001r.html css-writing-modes/reference/writing-mode-horizontal-001r-ref.html
+fuzzy-if(OSX||winWidget,153,612) == css-writing-modes/writing-mode-vertical-lr-002.xht css-writing-modes/reftest/writing-mode-vertical-lr-002-ref.xht
+fuzzy-if(OSX||winWidget,153,612) == css-writing-modes/writing-mode-vertical-rl-001.xht css-writing-modes/reftest/writing-mode-vertical-rl-001-ref.xht
+fuzzy-if(OSX||winWidget,153,612) == css-writing-modes/writing-mode-vertical-rl-002.xht css-writing-modes/reftest/writing-mode-vertical-rl-002-ref.xht
+fuzzy-if(OSX||winWidget,153,612) == css-writing-modes/writing-mode-vertical-rl-003.htm css-writing-modes/writing-mode-vertical-rl-003-ref.htm
+
--- a/layout/tools/reftest/globals.jsm
+++ b/layout/tools/reftest/globals.jsm
@@ -66,16 +66,19 @@ for (let [key, val] of Object.entries({
     totalChunks: 0,
     thisChunk: 0,
     containingWindow: null,
     urlFilterRegex: {},
     contentGfxInfo: null,
     focusFilterMode: "all",
     compareRetainedDisplayLists: false,
 
+    // add a delay between loading tests
+    runSlower: false,
+
     browser: undefined,
     // Are we testing web content loaded in a separate process?
     browserIsRemote: undefined,        // bool
     // Are we using <iframe mozbrowser>?
     browserIsIframe: undefined,        // bool
     browserMessageManager: undefined,  // bool
     canvas1: undefined,
     canvas2: undefined,
--- a/layout/tools/reftest/reftest-content.js
+++ b/layout/tools/reftest/reftest-content.js
@@ -40,16 +40,17 @@ var gFailureTimeout = null;
 var gFailureReason;
 var gAssertionCount = 0;
 
 var gDebug;
 var gVerbose = false;
 
 var gCurrentTestStartTime;
 var gClearingForAssertionCheck = false;
+var gRunSlower = false;
 
 const TYPE_LOAD = 'load';  // test without a reference (just test that it does
                            // not assert, crash, hang, or leak)
 const TYPE_SCRIPT = 'script'; // test contains individual test results
 const TYPE_PRINT = 'print'; // test and reference will be printed to PDF's and
                             // compared structurally
 
 // keep this in sync with globals.jsm
@@ -109,16 +110,17 @@ function OnInitialLoad()
     gDebug = Cc[DEBUG_CONTRACTID].getService(Ci.nsIDebug2);
     var env = Cc[ENVIRONMENT_CONTRACTID].getService(Ci.nsIEnvironment);
     gVerbose = !!env.get("MOZ_REFTEST_VERBOSE");
 
     RegisterMessageListeners();
 
     var initInfo = SendContentReady();
     gBrowserIsRemote = initInfo.remote;
+    gRunSlower = initInfo.runSlower;
 
     addEventListener("load", OnDocumentLoad, true);
 
     addEventListener("MozPaintWait", PaintWaitListener, true);
     addEventListener("MozPaintWaitFinished", PaintWaitFinishedListener, true);
 
     LogInfo("Using browser remote="+ gBrowserIsRemote +"\n");
 }
@@ -1149,17 +1151,21 @@ function RegisterMessageListeners()
         "reftest:ResetRenderingState",
         function (m) { RecvResetRenderingState(); }
     );
 }
 
 function RecvClear()
 {
     gClearingForAssertionCheck = true;
-    LoadURI(BLANK_URL_FOR_CLEARING);
+    if (gRunSlower) {
+        setTimeout(function () { LoadURI(BLANK_URL_FOR_CLEARING) }, 250);
+    } else {
+        LoadURI(BLANK_URL_FOR_CLEARING);
+    }
 }
 
 function RecvLoadTest(type, uri, uriTargetType, timeout)
 {
     StartTestURI(type, uri, uriTargetType, timeout);
 }
 
 function RecvLoadScriptTest(uri, timeout)
--- a/layout/tools/reftest/reftest.jsm
+++ b/layout/tools/reftest/reftest.jsm
@@ -500,16 +500,18 @@ function StartTests()
             var ids = g.urls.map(function(obj) {
                 return obj.identifier;
             });
             var suite = prefs.getStringPref('reftest.suite', 'reftest');
             logger.suiteStart(ids, suite, {"skipped": g.urls.length - numActiveTests});
             g.suiteStarted = true
         }
 
+        g.runSlower = prefs.getBoolPref('reftest.runSlower', false);
+
         if (g.shuffle) {
             Shuffle(g.urls);
         }
 
         g.totalTests = g.urls.length;
         if (!g.totalTests && !g.verify)
             throw "No tests to run";
 
@@ -1453,17 +1455,17 @@ function RecvAssertionCount(count)
 {
     DoAssertionCheck(count);
 }
 
 function RecvContentReady(info)
 {
     g.contentGfxInfo = info.gfx;
     InitAndStartRefTests();
-    return { remote: g.browserIsRemote };
+    return { remote: g.browserIsRemote, runSlower: g.runSlower };
 }
 
 function RecvException(what)
 {
     logger.error(g.currentURL + " | " + what);
     ++g.testResults.Exception;
 }
 
--- a/layout/tools/reftest/reftestcommandline.py
+++ b/layout/tools/reftest/reftestcommandline.py
@@ -249,16 +249,22 @@ class ReftestArgumentsParser(argparse.Ar
                           help="Run tests in verification mode: Run many times in different "
                                "ways, to see if there are intermittent failures.")
 
         self.add_argument("--verify-max-time",
                           type=int,
                           default=3600,
                           help="Maximum time, in seconds, to run in --verify mode..")
 
+        self.add_argument("--run-slower",
+                          action="store_true",
+                          dest="runSlower",
+                          default=False,
+                          help="Add a delay between each test to let the browser catch up.")
+
         mozlog.commandline.add_logging_group(self)
 
     def get_ip(self):
         import moznetwork
         if os.name != "nt":
             return moznetwork.get_ip()
         else:
             self.error(
--- a/layout/tools/reftest/runreftest.py
+++ b/layout/tools/reftest/runreftest.py
@@ -299,16 +299,17 @@ class RefTest(object):
             prefs['reftest.runUntilFailure'] = True
         if options.verify:
             prefs['reftest.verify'] = True
         if options.cleanupCrashes:
             prefs['reftest.cleanupPendingCrashes'] = True
         prefs['reftest.focusFilterMode'] = options.focusFilterMode
         prefs['reftest.logLevel'] = options.log_tbpl_level or 'info'
         prefs['reftest.suite'] = options.suite
+        prefs['reftest.runSlower'] = options.runSlower
 
         # Unconditionally update the e10s pref.
         if options.e10s:
             prefs['browser.tabs.remote.autostart'] = True
         else:
             prefs['browser.tabs.remote.autostart'] = False
 
         if not self.run_by_manifest:
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/PanZoomController.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/PanZoomController.java
@@ -223,21 +223,16 @@ public final class PanZoomController ext
             } else if ((InputDevice.getDevice(event.getDeviceId()).getSources() &
                         InputDevice.SOURCE_TOUCHPAD) == InputDevice.SOURCE_TOUCHPAD) {
                 return false;
             }
             return handleScrollEvent(event);
         } else if ((action == MotionEvent.ACTION_HOVER_MOVE) ||
                    (action == MotionEvent.ACTION_HOVER_ENTER) ||
                    (action == MotionEvent.ACTION_HOVER_EXIT)) {
-            if (event.getSource() == InputDevice.SOURCE_TOUCHSCREEN) {
-                // A hover is not possible on a touchscreen unless via accessibility
-                // and we handle that elsewhere.
-                return false;
-            }
             return handleMouseEvent(event);
         } else {
             return false;
         }
     }
 
     private void enableEventQueue() {
         if (mQueuedEvents != null) {
--- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoView.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoView.java
@@ -510,30 +510,21 @@ public class GeckoView extends FrameLayo
 
         // NOTE: Treat mouse events as "touch" rather than as "mouse", so mouse can be
         // used to pan/zoom. Call onMouseEvent() instead for behavior similar to desktop.
         return mSession != null &&
                mSession.getPanZoomController().onTouchEvent(event);
     }
 
     @Override
-    public boolean onHoverEvent(final MotionEvent event) {
-        // A touchscreen hover event is a screen reader doing explore-by-touch
-        if (SessionAccessibility.Settings.isEnabled() &&
-            event.getSource() == InputDevice.SOURCE_TOUCHSCREEN &&
-            mSession != null) {
-            mSession.getAccessibility().onExploreByTouch(event);
-            return true;
-        }
-
-        return false;
-    }
-
-    @Override
     public boolean onGenericMotionEvent(final MotionEvent event) {
         if (AndroidGamepadManager.handleMotionEvent(event)) {
             return true;
         }
 
-        return mSession != null &&
+        if (mSession == null) {
+            return false;
+        }
+
+        return mSession.getAccessibility().onMotionEvent(event) ||
                mSession.getPanZoomController().onMotionEvent(event);
     }
 }
--- a/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/SessionAccessibility.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/geckoview/SessionAccessibility.java
@@ -14,16 +14,17 @@ import org.mozilla.gecko.util.ThreadUtil
 
 import android.annotation.TargetApi;
 import android.content.Context;
 import android.graphics.Matrix;
 import android.graphics.Rect;
 import android.os.Build;
 import android.os.Bundle;
 import android.util.Log;
+import android.view.InputDevice;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewParent;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.accessibility.AccessibilityNodeProvider;
 
@@ -426,14 +427,30 @@ public class SessionAccessibility {
             populateNodeInfoFromJSON(mVirtualContentNode, message);
         }
 
         final AccessibilityEvent accessibilityEvent = obtainEvent(eventType, eventSource);
         populateEventFromJSON(accessibilityEvent, message);
         ((ViewParent) mView).requestSendAccessibilityEvent(mView, accessibilityEvent);
     }
 
-    public void onExploreByTouch(final MotionEvent event) {
-      final GeckoBundle data = new GeckoBundle(2);
-      data.putDoubleArray("coordinates", new double[] {event.getRawX(), event.getRawY()});
-      mSession.getEventDispatcher().dispatch("GeckoView:AccessibilityExploreByTouch", data);
+    public boolean onMotionEvent(final MotionEvent event) {
+        if (!Settings.isEnabled()) {
+            return false;
+        }
+
+        if (event.getSource() != InputDevice.SOURCE_TOUCHSCREEN) {
+            return false;
+        }
+
+        final int action = event.getActionMasked();
+        if ((action != MotionEvent.ACTION_HOVER_MOVE) &&
+                (action != MotionEvent.ACTION_HOVER_ENTER) &&
+                (action != MotionEvent.ACTION_HOVER_EXIT)) {
+            return false;
+        }
+
+        final GeckoBundle data = new GeckoBundle(2);
+        data.putDoubleArray("coordinates", new double[] {event.getRawX(), event.getRawY()});
+        mSession.getEventDispatcher().dispatch("GeckoView:AccessibilityExploreByTouch", data);
+        return true;
     }
 }
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -2471,17 +2471,17 @@ pref("security.directory",              
 pref("security.dialog_enable_delay", 1000);
 pref("security.notification_enable_delay", 500);
 
 pref("security.csp.enable", true);
 pref("security.csp.experimentalEnabled", false);
 pref("security.csp.enableStrictDynamic", true);
 
 #if defined(DEBUG) && !defined(ANDROID)
-pref("csp.content_privileged_about_uris_without_csp", "blank,credits,home,logo,newtab,printpreview,srcdoc,studies");
+pref("csp.content_privileged_about_uris_without_csp", "blank,home,newtab,printpreview,srcdoc,studies");
 #endif
 
 #ifdef NIGHTLY_BUILD
 pref("security.csp.enable_violation_events", true);
 #else
 pref("security.csp.enable_violation_events", false);
 #endif
 
--- a/taskcluster/ci/release-eme-free-repack/kind.yml
+++ b/taskcluster/ci/release-eme-free-repack/kind.yml
@@ -36,16 +36,23 @@ job-defaults:
    run:
       using: mozharness
       config:
          - partner_repacks/release_mozilla-release_desktop.py
       script: mozharness/scripts/desktop_partner_repacks.py
       job-script: taskcluster/scripts/builder/repackage.sh
       need-xvfb: false
       tooltool-downloads: false
+   extra:
+      limit-locales:
+         by-project:
+            birch: true
+            jamun: true
+            maple: true
+            default: false
 
 jobs:
    macosx64-nightly:
       treeherder:
          symbol: EME
          platform: macosx64/opt
          kind: test
          tier: 1
--- a/taskcluster/ci/release-partner-repack/kind.yml
+++ b/taskcluster/ci/release-partner-repack/kind.yml
@@ -36,16 +36,23 @@ job-defaults:
    run:
       using: mozharness
       config:
          - partner_repacks/release_mozilla-release_desktop.py
       script: mozharness/scripts/desktop_partner_repacks.py
       job-script: taskcluster/scripts/builder/repackage.sh
       need-xvfb: false
       tooltool-downloads: false
+   extra:
+      limit-locales:
+         by-project:
+            birch: true
+            jamun: true
+            maple: true
+            default: false
 
 jobs:
    linux-nightly:
       attributes:
          build_platform: linux-nightly
          build_type: opt
          artifact_prefix: releng/partner
          nightly: true
--- a/taskcluster/ci/test/reftest.yml
+++ b/taskcluster/ci/test/reftest.yml
@@ -127,16 +127,64 @@ reftest:
                 windows10-64.*/opt: false
                 default: true
     tier:
         by-test-platform:
             linux64-qr/.*: 1
             windows10-64-asan.*: 3
             default: default
 
+reftest-fonts:
+    description: "Reftest font specifc run"
+    suite: reftest/reftest-fonts
+    treeherder-symbol: R(Rf)
+    run-on-projects:
+        by-test-platform:
+            .*-qr/.*: ['trunk', 'try']  # exclude beta and project branches
+            default: built-projects
+    instance-size:
+        by-test-platform:
+            android.*: xlarge
+            default: default
+    virtualization:
+        by-test-platform:
+            windows10.*: hardware
+            default: virtual-with-gpu
+    chunks:
+        by-test-platform:
+            android-4.3-arm7-api-16/debug: 28
+            android.*: 7
+            macosx64.*/opt: 1
+            macosx64.*/debug: 2
+            windows.*/opt: 1
+            windows.*/debug: 2
+            windows10-64-ccov/debug: 3
+            default: 4
+    e10s:
+        by-test-platform:
+            linux32/debug: both
+            default: true
+    max-run-time:
+        by-test-platform:
+            android.*: 7200
+            windows10-64-ccov/debug: 5400
+            default: 3600
+    mozharness:
+        chunked:
+            by-test-platform:
+                android.*: false
+                macosx64/opt: false
+                windows10-64.*/opt: false
+                default: true
+    tier:
+        by-test-platform:
+            linux64-qr/.*: 1
+            windows10-64-asan.*: 3
+            default: default
+
 reftest-gpu:
     description: "Reftest GPU run"
     suite: reftest/reftest-gpu
     treeherder-symbol: R(Rg)
     chunks:
         by-test-platform:
             windows.*/opt: 2
             default: 4
@@ -146,32 +194,76 @@ reftest-gpu:
             default: built-projects
     instance-size: default
     virtualization: virtual-with-gpu
     max-run-time: 3600
     mozharness:
         chunked: true
     tier: default
 
+reftest-gpu-fonts:
+    description: "Reftest GPU run"
+    suite: reftest/reftest-gpu-fonts
+    treeherder-symbol: R(Rgf)
+    chunks:
+        by-test-platform:
+            windows.*/opt: 2
+            default: 4
+    run-on-projects:
+        by-test-platform:
+            windows10.*: []
+            default: built-projects
+    instance-size: default
+    virtualization: virtual-with-gpu
+    max-run-time: 3600
+    mozharness:
+        chunked: true
+    tier: default
+
 reftest-no-accel:
     description: "Reftest not accelerated run"
     suite: reftest/reftest-no-accel
     treeherder-symbol: R(Ru)
     virtualization: virtual-with-gpu
     run-on-projects:
         by-test-platform:
             windows10.*: []
             default: built-projects
     chunks:
         by-test-platform:
             macosx.*: 1
-            windows.*: 4
-            default: 8
+            windows.*: 2
+            default: 4
     mozharness:
         chunked:
             by-test-platform:
                 windows10-64.*/opt: false
                 macosx.*: false
                 default: true
     tier:
         by-test-platform:
             windows10-64-asan.*: 3
             default: default
+
+reftest-no-accel-fonts:
+    description: "Reftest not accelerated run"
+    suite: reftest/reftest-no-accel-fonts
+    treeherder-symbol: R(Ruf)
+    virtualization: virtual-with-gpu
+    run-on-projects:
+        by-test-platform:
+            windows10.*: []
+            default: built-projects
+    chunks:
+        by-test-platform:
+            macosx.*: 1
+            windows.*: 2
+            default: 4
+    mozharness:
+        chunked:
+            by-test-platform:
+                windows10-64.*/opt: false
+                macosx.*: false
+                default: true
+    tier:
+        by-test-platform:
+            windows10-64-asan.*: 3
+            default: default
--- a/taskcluster/ci/test/test-sets.yml
+++ b/taskcluster/ci/test/test-sets.yml
@@ -30,17 +30,19 @@ common-tests:
     - mochitest-browser-chrome
     - mochitest-chrome
     - mochitest-clipboard
     - mochitest-devtools-chrome
     - mochitest-gpu
     - mochitest-media
     - mochitest-webgl
     - reftest
+    - reftest-fonts
     - reftest-no-accel
+    - reftest-no-accel-fonts
     - telemetry-tests-client
     - test-coverage
     - test-coverage-wpt
     - test-verify
     - test-verify-gpu
     - test-verify-wpt
     - xpcshell
 
@@ -112,16 +114,17 @@ linux-qr-tests:
     - jittest
     - jsreftest
     - mochitest
     - mochitest-a11y
     - mochitest-gpu
     - mochitest-media
     - mochitest-webgl
     - reftest
+    - reftest-fonts
     - xpcshell
 
 linux-talos-profiling:
     - talos-chrome-profiling
     - talos-damp-profiling
     - talos-dromaeojs-profiling
     - talos-g1-profiling
     - talos-g3-profiling
@@ -141,16 +144,17 @@ linux-talos-flex:
     - talos-flex
 
 windows-qr-tests:
     - crashtest
     - mochitest-gpu
     - mochitest-media
     - mochitest-webgl
     - reftest
+    - reftest-fonts
 
 windows-qr-talos:
     - talos-chrome
     - talos-dromaeojs
     - talos-g1
     - talos-g4
     - talos-perf-reftest
     - talos-perf-reftest-singletons
@@ -161,16 +165,17 @@ windows-qr-talos:
 jsdcov-code-coverage-tests:
     - mochitest
     - mochitest-browser-chrome
     - mochitest-devtools-chrome
     - xpcshell
 
 windows-reftest-gpu:
     - reftest-gpu
+    - reftest-gpu-fonts
 
 windows-tests:
     - cppunit
     - crashtest
     - firefox-ui-functional-local
     - firefox-ui-functional-remote
     - gtest
     - jittest
@@ -182,17 +187,19 @@ windows-tests:
     - mochitest-browser-chrome
     - mochitest-chrome
     - mochitest-clipboard
     - mochitest-devtools-chrome
     - mochitest-gpu
     - mochitest-media
     - mochitest-webgl
     - reftest
+    - reftest-fonts
     - reftest-no-accel
+    - reftest-no-accel-fonts
     - test-coverage
     - test-coverage-wpt
     - test-verify
     - test-verify-gpu
     - test-verify-wpt
     - web-platform-tests
     - web-platform-tests-reftests
     - xpcshell
@@ -249,16 +256,17 @@ macosx64-tests:
     - mochitest-browser-chrome
     - mochitest-chrome
     - mochitest-clipboard
     - mochitest-devtools-chrome
     - mochitest-gpu
     - mochitest-media
     - mochitest-webgl
     - reftest
+    - reftest-fonts
     - test-verify
     - test-verify-gpu
     - test-verify-wpt
     - web-platform-tests
     - web-platform-tests-reftests
     - xpcshell
 
 macosx64-talos:
@@ -311,17 +319,19 @@ linux32-tests:
     - mochitest-a11y
     - mochitest-browser-chrome
     - mochitest-chrome
     - mochitest-clipboard
     - mochitest-gpu
     - mochitest-media
     - mochitest-webgl
     - reftest
+    - reftest-fonts
     - reftest-no-accel
+    - reftest-no-accel-fonts
     - web-platform-tests
     - web-platform-tests-reftests
     - web-platform-tests-wdspec
     - xpcshell
 
 linux32-opt-tests:
     # mochitest-dt is too slow on linux32/debug
     - mochitest-devtools-chrome
@@ -339,16 +349,17 @@ android-common-tests:
     # - jittest # not ready yet: bug 1098508
     - jsreftest
     - mochitest
     - mochitest-chrome
     - mochitest-clipboard
     - mochitest-gpu
     - mochitest-media
     - reftest
+    - reftest-fonts
     - test-verify
     - xpcshell
 
 android-debug-tests:
     # Marionette only available on Fennec debug builds as a security precaution
     - marionette
 
 android-opt-tests:
--- a/taskcluster/taskgraph/transforms/partner_repack.py
+++ b/taskcluster/taskgraph/transforms/partner_repack.py
@@ -18,16 +18,20 @@ transforms = TransformSequence()
 
 @transforms.add
 def resolve_properties(config, tasks):
     for task in tasks:
         for property in ("REPACK_MANIFESTS_URL", ):
             property = "worker.env.{}".format(property)
             resolve_keyed_by(task, property, property, **config.params)
 
+        for property in ("limit-locales", ):
+            property = "extra.{}".format(property)
+            resolve_keyed_by(task, property, property, **config.params)
+
         if task['worker']['env']['REPACK_MANIFESTS_URL'].startswith('git@'):
             task.setdefault('scopes', []).append(
                 'secrets:get:project/releng/gecko/build/level-{level}/partner-github-ssh'.format(
                     **config.params
                 )
             )
 
         yield task
@@ -38,23 +42,31 @@ def make_label(config, tasks):
     for task in tasks:
         task['label'] = "{}-{}".format(config.kind, task['name'])
         yield task
 
 
 @transforms.add
 def add_command_arguments(config, tasks):
     release_config = get_release_config(config)
+    all_locales = set()
+    for partner_class in config.params['release_partner_config'].values():
+        for partner in partner_class.values():
+            for sub_partner in partner.values():
+                all_locales.update(sub_partner.get('locales', []))
     for task in tasks:
         # add the MOZHARNESS_OPTIONS, eg version=61.0, build-number=1, platform=win64
         task['run']['options'] = [
             'version={}'.format(release_config['version']),
             'build-number={}'.format(release_config['build_number']),
             'platform={}'.format(task['attributes']['build_platform'].split('-')[0]),
         ]
+        if task['extra']['limit-locales']:
+            for locale in all_locales:
+                task['run']['options'].append('limit-locale={}'.format(locale))
 
         # The upstream taskIds are stored a special environment variable, because we want to use
         # task-reference's to resolve dependencies, but the string handling of MOZHARNESS_OPTIONS
         # blocks that. It's space-separated string of ids in the end.
         task['worker']['env']['UPSTREAM_TASKIDS'] = {
             'task-reference': ' '.join(['<{}>'.format(dep) for dep in task['dependencies']])
         }
 
--- a/taskcluster/taskgraph/transforms/tests.py
+++ b/taskcluster/taskgraph/transforms/tests.py
@@ -848,16 +848,30 @@ def allow_software_gl_layers(config, tes
             # This should be set always once bug 1296086 is resolved.
             test['mozharness'].setdefault('extra-options', [])\
                               .append("--allow-software-gl-layers")
 
         yield test
 
 
 @transforms.add
+def reftest_win7_slowmode(config, tests):
+    """
+    Win7 needs time to render fonts, so for the reftest-fonts, add --run-slow
+    """
+    for test in tests:
+        if test['build-platform'].startswith('win32') and \
+           'font' in test['suite']:
+            test['mozharness'].setdefault('extra-options', [])\
+                              .append("--run-slower")
+
+        yield test
+
+
+@transforms.add
 def enable_webrender(config, tests):
     """
     Handle the "webrender" property by passing a flag to mozharness if it is
     enabled.
     """
     for test in tests:
         if test.get('webrender'):
             test['mozharness'].setdefault('extra-options', [])\
--- a/testing/mozharness/configs/android/android_common.py
+++ b/testing/mozharness/configs/android/android_common.py
@@ -160,16 +160,35 @@ config = {
                 "--extra-profile-file=fonts",
                 "--extra-profile-file=hyphenation",
                 "--suite=reftest",
                 "--log-raw=%(raw_log_file)s",
                 "--log-errorsummary=%(error_summary_file)s",
             ],
             "tests": ["tests/layout/reftests/reftest.list",],
         },
+        "reftest-fonts": {
+            "run_filename": "remotereftest.py",
+            "testsdir": "reftest",
+            "options": [
+                "--app=%(app)s",
+                "--ignore-window-size",
+                "--remote-webserver=%(remote_webserver)s",
+                "--xre-path=%(xre_path)s",
+                "--utility-path=%(utility_path)s",
+                "--httpd-path", "%(modules_dir)s",
+                "--symbols-path=%(symbols_path)s",
+                "--extra-profile-file=fonts",
+                "--extra-profile-file=hyphenation",
+                "--suite=reftest",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+            ],
+            "tests": ["tests/layout/reftests/reftest_fonts.list",],
+        },
         "crashtest": {
             "run_filename": "remotereftest.py",
             "testsdir": "reftest",
             "options": [
                 "--app=%(app)s",
                 "--ignore-window-size",
                 "--remote-webserver=%(remote_webserver)s",
                 "--xre-path=%(xre_path)s",
--- a/testing/mozharness/configs/unittests/linux_unittest.py
+++ b/testing/mozharness/configs/unittests/linux_unittest.py
@@ -200,21 +200,31 @@ config = {
                        "--suite=jstestbrowser"],
             "tests": ["tests/jsreftest/tests/jstests.list"]
         },
         "reftest": {
             "options": ["--suite=reftest",
                         "--setpref=layers.acceleration.force-enabled=true"],
             "tests": ["tests/reftest/tests/layout/reftests/reftest.list"]
         },
+        "reftest-fonts": {
+            "options": ["--suite=reftest",
+                        "--setpref=layers.acceleration.force-enabled=true"],
+            "tests": ["tests/reftest/tests/layout/reftests/reftest_fonts.list"]
+        },
         "reftest-no-accel": {
             "options": ["--suite=reftest",
                         "--setpref=layers.acceleration.disabled=true"],
             "tests": ["tests/reftest/tests/layout/reftests/reftest.list"]
         },
+        "reftest-no-accel-fonts": {
+            "options": ["--suite=reftest",
+                        "--setpref=layers.acceleration.disabled=true"],
+            "tests": ["tests/reftest/tests/layout/reftests/reftest_fonts.list"]
+        },
     },
     "all_xpcshell_suites": {
         "xpcshell": {
             "options": ["--xpcshell=%(abs_app_dir)s/" + XPCSHELL_NAME,
                         "--manifest=tests/xpcshell/tests/xpcshell.ini"],
             "tests": []
         },
         "xpcshell-addons": {
--- a/testing/mozharness/configs/unittests/mac_unittest.py
+++ b/testing/mozharness/configs/unittests/mac_unittest.py
@@ -161,16 +161,20 @@ config = {
             'options':["--extra-profile-file=tests/jsreftest/tests/user.js",
                        "--suite=jstestbrowser"],
             'tests': ["tests/jsreftest/tests/jstests.list"]
         },
         "reftest": {
             'options': ["--suite=reftest"],
             'tests': ["tests/reftest/tests/layout/reftests/reftest.list"]
         },
+        "reftest-fonts": {
+            'options': ["--suite=reftest"],
+            'tests': ["tests/reftest/tests/layout/reftests/reftest_fonts.list"]
+        },
     },
     "all_xpcshell_suites": {
         "xpcshell": {
             'options': ["--xpcshell=%(abs_app_dir)s/" + XPCSHELL_NAME,
                         "--manifest=tests/xpcshell/tests/xpcshell.ini"],
             'tests': []
         },
         "xpcshell-addons": {
--- a/testing/mozharness/configs/unittests/win_taskcluster_unittest.py
+++ b/testing/mozharness/configs/unittests/win_taskcluster_unittest.py
@@ -185,26 +185,40 @@ config = {
             'options':["--extra-profile-file=tests/jsreftest/tests/user.js",
                        "--suite=jstestbrowser"],
             'tests': ["tests/jsreftest/tests/jstests.list"]
         },
         "reftest": {
             'options': ["--suite=reftest"],
             'tests': ["tests/reftest/tests/layout/reftests/reftest.list"]
         },
+        "reftest-fonts": {
+            'options': ["--suite=reftest"],
+            'tests': ["tests/reftest/tests/layout/reftests/reftest_fonts.list"]
+        },
         "reftest-gpu": {
             'options': ["--suite=reftest",
                         "--setpref=layers.gpu-process.force-enabled=true"],
             'tests': ["tests/reftest/tests/layout/reftests/reftest.list"]
         },
+        "reftest-gpu-fonts": {
+            'options': ["--suite=reftest",
+                        "--setpref=layers.gpu-process.force-enabled=true"],
+            'tests': ["tests/reftest/tests/layout/reftests/reftest_fonts.list"]
+        },
         "reftest-no-accel": {
             "options": ["--suite=reftest",
                         "--setpref=layers.acceleration.disabled=true"],
             "tests": ["tests/reftest/tests/layout/reftests/reftest.list"]
         },
+        "reftest-no-accel-fonts": {
+            "options": ["--suite=reftest",
+                        "--setpref=layers.acceleration.disabled=true"],
+            "tests": ["tests/reftest/tests/layout/reftests/reftest_fonts.list"]
+        },
     },
     "all_xpcshell_suites": {
         "xpcshell": {
             'options': ["--xpcshell=%(abs_app_dir)s/" + XPCSHELL_NAME,
                         "--manifest=tests/xpcshell/tests/xpcshell.ini"],
             'tests': []
         },
         "xpcshell-addons": {
--- a/testing/mozharness/mozharness/mozilla/testing/errors.py
+++ b/testing/mozharness/mozharness/mozilla/testing/errors.py
@@ -20,53 +20,46 @@ from mozharness.base.log import INFO, WA
 # ErrorLists {{{1
 _mochitest_summary = {
     'regex': re.compile(r'''(\d+ INFO (Passed|Failed|Todo):\ +(\d+)|\t(Passed|Failed|Todo): (\d+))'''),
     'pass_group': "Passed",
     'fail_group': "Failed",
     'known_fail_group': "Todo",
 }
 
+_reftest_summary = {
+    'regex': re.compile(r'''REFTEST INFO \| (Successful|Unexpected|Known problems): (\d+) \('''),
+    'pass_group': "Successful",
+    'fail_group': "Unexpected",
+    'known_fail_group': "Known problems",
+}
+
 TinderBoxPrintRe = {
     "mochitest_summary": _mochitest_summary,
     "mochitest-chrome_summary": _mochitest_summary,
     "mochitest-gl_summary": _mochitest_summary,
     "mochitest-media_summary": _mochitest_summary,
     "mochitest-plain-clipboard_summary": _mochitest_summary,
     "mochitest-plain-gpu_summary": _mochitest_summary,
     "marionette_summary": {
         'regex': re.compile(r'''(passed|failed|todo):\ +(\d+)'''),
         'pass_group': "passed",
         'fail_group': "failed",
         'known_fail_group': "todo",
     },
-    "reftest_summary": {
-        'regex': re.compile(r'''REFTEST INFO \| (Successful|Unexpected|Known problems): (\d+) \('''),
-        'pass_group': "Successful",
-        'fail_group': "Unexpected",
-        'known_fail_group': "Known problems",
-    },
-    "crashtest_summary": {
-        'regex': re.compile(r'''REFTEST INFO \| (Successful|Unexpected|Known problems): (\d+) \('''),
-        'pass_group': "Successful",
-        'fail_group': "Unexpected",
-        'known_fail_group': "Known problems",
-    },
+    "reftest_summary": _reftest_summary,
+    "reftest-fonts_summary": _reftest_summary,
+    "crashtest_summary": _reftest_summary,
     "xpcshell_summary": {
         'regex': re.compile(r'''INFO \| (Passed|Failed|Todo): (\d+)'''),
         'pass_group': "Passed",
         'fail_group': "Failed",
         'known_fail_group': "Todo",
     },
-    "jsreftest_summary": {
-        'regex': re.compile(r'''REFTEST INFO \| (Successful|Unexpected|Known problems): (\d+) \('''),
-        'pass_group': "Successful",
-        'fail_group': "Unexpected",
-        'known_fail_group': "Known problems",
-    },
+    "jsreftest_summary": _reftest_summary,
     "robocop_summary": _mochitest_summary,
     "instrumentation_summary": _mochitest_summary,
     "cppunittest_summary": {
         'regex': re.compile(r'''cppunittests INFO \| (Passed|Failed): (\d+)'''),
         'pass_group': "Passed",
         'fail_group': "Failed",
         'known_fail_group': None,
     },
--- a/testing/mozharness/mozharness/mozilla/testing/testbase.py
+++ b/testing/mozharness/mozharness/mozilla/testing/testbase.py
@@ -412,16 +412,17 @@ 2. running via buildbot and running the 
             'mochitest-plain-clipboard': 'mochitest',
             'mochitest-plain-gpu': 'mochitest',
             'mochitest-gl': 'mochitest',
             'geckoview': 'mochitest',
             'geckoview-junit': 'mochitest',
             'jsreftest': 'reftest',
             'crashtest': 'reftest',
             'reftest-debug': 'reftest',
+            'reftest-fonts': 'reftest',
             'jsreftest-debug': 'reftest',
             'crashtest-debug': 'reftest',
         }
         suite_categories = [aliases.get(name, name) for name in suite_categories]
 
         dirs = self.query_abs_dirs()
         test_install_dir = dirs.get('abs_test_install_dir',
                                     os.path.join(dirs['abs_work_dir'], 'tests'))
--- a/testing/mozharness/scripts/android_emulator_unittest.py
+++ b/testing/mozharness/scripts/android_emulator_unittest.py
@@ -742,17 +742,19 @@ class AndroidEmulatorTest(TestingMixin, 
     def _query_suites(self):
         if self.test_suite:
             return [(self.test_suite, self.test_suite)]
         # per-test mode: determine test suites to run
         all = [('mochitest', {'plain': 'mochitest',
                               'chrome': 'mochitest-chrome',
                               'plain-clipboard': 'mochitest-plain-clipboard',
                               'plain-gpu': 'mochitest-plain-gpu'}),
-               ('reftest', {'reftest': 'reftest', 'crashtest': 'crashtest'}),
+               ('reftest', {'reftest': 'reftest',
+                            'reftest-fonts': 'reftest-fonts',
+                            'crashtest': 'crashtest'}),
                ('xpcshell', {'xpcshell': 'xpcshell'})]
         suites = []
         for (category, all_suites) in all:
             cat_suites = self.query_per_test_category_suites(category, all_suites)
             for k in cat_suites.keys():
                 suites.append((k, cat_suites[k]))
         return suites
 
--- a/testing/mozharness/scripts/desktop_partner_repacks.py
+++ b/testing/mozharness/scripts/desktop_partner_repacks.py
@@ -51,16 +51,20 @@ class DesktopPartnerRepacks(ReleaseMixin
           "dest": "partner",
           "help": "Limit repackaging to partners matching this string",
           }],
         [["--taskid", "-t"], {
             "dest": "taskIds",
             "action": "extend",
             "help": "taskId(s) of upstream tasks for vanilla Firefox artifacts",
         }],
+        [["--limit-locale", "-l"], {
+            "dest": "limitLocales",
+            "action": "append",
+        }],
     ]
 
     def __init__(self):
         # fxbuild style:
         buildscript_kwargs = {
             'all_actions': DesktopPartnerRepacks.actions,
             'default_actions': DesktopPartnerRepacks.actions,
             'config': {
@@ -157,16 +161,19 @@ class DesktopPartnerRepacks(ReleaseMixin
                       "-n", str(self.config['build_number'])]
         if self.config.get('platform'):
             repack_cmd.extend(["--platform", self.config['platform']])
         if self.config.get('partner'):
             repack_cmd.extend(["--partner", self.config['partner']])
         if self.config.get('taskIds'):
             for taskId in self.config['taskIds']:
                 repack_cmd.extend(["--taskid", taskId])
+        if self.config.get("limitLocales"):
+            for locale in self.config["limitLocales"]:
+                repack_cmd.extend(["--limit-locale", locale])
 
         return self.run_command(repack_cmd,
                                 cwd=self.query_abs_dirs()['abs_scripts_dir'])
 
 
 # main {{{
 if __name__ == '__main__':
     partner_repacks = DesktopPartnerRepacks()
--- a/testing/mozharness/scripts/desktop_unittest.py
+++ b/testing/mozharness/scripts/desktop_unittest.py
@@ -170,16 +170,22 @@ class DesktopUnittest(TestingMixin, Merc
             "help": "Tries to enable the WebRender compositor."}
          ],
         [["--gpu-required"], {
             "action": "store_true",
             "dest": "gpu_required",
             "default": "False",
             "help": "Run additional verification on modified tests using gpu instances."}
          ],
+        [["--run-slower"], {
+            "action": "store_true",
+            "dest": "run_slower",
+            "default": False,
+            "help": "Run additional verification on modified tests using gpu instances."}
+         ],
     ] + copy.deepcopy(testing_config_options) + \
         copy.deepcopy(blobupload_config_options) + \
         copy.deepcopy(code_coverage_config_options)
 
     def __init__(self, require_config_file=True):
         # abs_dirs defined already in BaseScript but is here to make pylint happy
         self.abs_dirs = None
         super(DesktopUnittest, self).__init__(
@@ -415,16 +421,23 @@ class DesktopUnittest(TestingMixin, Merc
                     base_cmd.append('--bisect-chunk=default')
                 else:
                     self.warning("--no-random does not currently work with suites other than "
                                  "mochitest.")
 
             if c['headless']:
                 base_cmd.append('--headless')
 
+            if c['run_slower']:
+                if suite_category == "reftest":
+                    base_cmd.append('--run-slower')
+                else:
+                    self.warning("--run-slow does not currently work with suites other than "
+                                 "reftest.")
+
             # set pluginsPath
             abs_res_plugins_dir = os.path.join(abs_res_dir, 'plugins')
             str_format_values['test_plugin_path'] = abs_res_plugins_dir
 
             if suite_category not in c["suite_definitions"]:
                 self.fatal("'%s' not defined in the config!")
 
             if suite in ('browser-chrome-coverage', 'xpcshell-coverage',
--- a/testing/talos/talos/tests/devtools/addon/content/damp.js
+++ b/testing/talos/talos/tests/devtools/addon/content/damp.js
@@ -76,16 +76,18 @@ function awaitBrowserLoaded(browser, inc
     });
   });
 }
 
 /* globals res:true */
 
 function Damp() {
   Services.prefs.setBoolPref("devtools.webconsole.new-frontend-enabled", true);
+  // Disable the 3 pane inspector onboarding tooltip for DAMP tests. See Bug 1459538.
+  Services.prefs.setBoolPref("devtools.inspector.show-three-pane-tooltip", false);
 }
 
 Damp.prototype = {
   async garbageCollect() {
     dump("Garbage collect\n");
 
     // Minimize memory usage
     // mimic miminizeMemoryUsage, by only flushing JS objects via GC.
deleted file mode 100644
--- a/testing/web-platform/meta/content-security-policy/script-src/script-src-strict_dynamic_eval.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[script-src-strict_dynamic_eval.html]
-  [Script injected via `eval` is not allowed with `strict-dynamic` without `unsafe-eval`.]
-    expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/content-security-policy/script-src/script-src-strict_dynamic_new_function.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[script-src-strict_dynamic_new_function.html]
-  [Script injected via 'eval' is not allowed with 'strict-dynamic' without 'unsafe-eval'.]
-    expected: FAIL
-
--- a/toolkit/components/telemetry/tests/unit/test_TelemetrySend.js
+++ b/toolkit/components/telemetry/tests/unit/test_TelemetrySend.js
@@ -537,18 +537,22 @@ add_task(async function testCookies() {
 
   await TelemetrySend.reset();
   PingServer.clearRequests();
 
   let uri = Services.io.newURI("http://localhost:" + PingServer.port);
   Services.cookies.setCookieString(uri, null, "cookie-time=yes", null);
 
   const id = await TelemetryController.submitExternalPing(TEST_TYPE, {});
-  let request = await PingServer.promiseNextRequest();
-  let ping = decodeRequestPayload(request);
+  let foundit = false;
+  while (!foundit) {
+    var request = await PingServer.promiseNextRequest();
+    var ping = decodeRequestPayload(request);
+    foundit = id === ping.id;
+  }
   Assert.equal(id, ping.id, "We're testing the right ping's request, right?");
   Assert.equal(false, request.hasHeader("Cookie"), "Request should not have Cookie header");
 });
 
 add_task(async function test_measurePingsSize() {
   const TEST_TYPE = "test-measure-ping-size";
 
   let histSuccessPingSize = Telemetry.getHistogramById("TELEMETRY_SUCCESSFUL_SEND_PINGS_SIZE_KB");