Bug 1564549 - Remove AccessFu. r=geckoview-reviewers,yzen,snorp
authorEitan Isaacson <eitan@monotonous.org>
Tue, 24 Sep 2019 19:28:28 +0000
changeset 494804 5eca1b56929069654b5851c9dd054e821570fd78
parent 494803 87148740a6c26ca8fc440804e29ae932c25a22fe
child 494805 f94173bcd08dcb7059333c7e01ac8ab5c53de63e
push id114131
push userdluca@mozilla.com
push dateThu, 26 Sep 2019 09:47:34 +0000
treeherdermozilla-inbound@1dc1a755079a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersgeckoview-reviewers, yzen, snorp
bugs1564549
milestone71.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1564549 - Remove AccessFu. r=geckoview-reviewers,yzen,snorp Differential Revision: https://phabricator.services.mozilla.com/D45604
accessible/jsat/AccessFu.jsm
accessible/jsat/Constants.jsm
accessible/jsat/ContentControl.jsm
accessible/jsat/EventManager.jsm
accessible/jsat/Traversal.jsm
accessible/jsat/Utils.jsm
accessible/jsat/content-script.js
accessible/jsat/jar.mn
accessible/jsat/moz.build
accessible/moz.build
accessible/tests/mochitest/jsat/a11y.ini
accessible/tests/mochitest/jsat/doc_content_integration.html
accessible/tests/mochitest/jsat/doc_content_text.html
accessible/tests/mochitest/jsat/doc_traversal.html
accessible/tests/mochitest/jsat/jsatcommon.js
accessible/tests/mochitest/jsat/output.js
accessible/tests/mochitest/jsat/test_alive.html
accessible/tests/mochitest/jsat/test_content_integration.html
accessible/tests/mochitest/jsat/test_explicit_names.html
accessible/tests/mochitest/jsat/test_hints.html
accessible/tests/mochitest/jsat/test_landmarks.html
accessible/tests/mochitest/jsat/test_live_regions.html
accessible/tests/mochitest/jsat/test_output.html
accessible/tests/mochitest/jsat/test_output_mathml.html
accessible/tests/mochitest/jsat/test_tables.html
accessible/tests/mochitest/jsat/test_text_editable_navigation.html
accessible/tests/mochitest/jsat/test_text_editing.html
accessible/tests/mochitest/jsat/test_text_navigation.html
accessible/tests/mochitest/jsat/test_text_navigation_focus.html
accessible/tests/mochitest/jsat/test_traversal.html
accessible/tests/mochitest/jsat/test_traversal_helper.html
accessible/tests/mochitest/moz.build
browser/base/content/test/static/browser_all_files_referenced.js
dom/locales/jar.mn
mobile/android/chrome/content/browser.js
mobile/android/chrome/geckoview/geckoview.js
mobile/android/modules/geckoview/GeckoViewAccessibility.jsm
mobile/android/modules/geckoview/moz.build
tools/lint/license.yml
deleted file mode 100644
--- a/accessible/jsat/AccessFu.jsm
+++ /dev/null
@@ -1,355 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-var EXPORTED_SYMBOLS = ["AccessFu"];
-
-const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
-const { Logger, Utils } = ChromeUtils.import(
-  "resource://gre/modules/accessibility/Utils.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "Rect",
-  "resource://gre/modules/Geometry.jsm"
-);
-
-const GECKOVIEW_MESSAGE = {
-  ACTIVATE: "GeckoView:AccessibilityActivate",
-  BY_GRANULARITY: "GeckoView:AccessibilityByGranularity",
-  CLIPBOARD: "GeckoView:AccessibilityClipboard",
-  CURSOR_TO_FOCUSED: "GeckoView:AccessibilityCursorToFocused",
-  EXPLORE_BY_TOUCH: "GeckoView:AccessibilityExploreByTouch",
-  LONG_PRESS: "GeckoView:AccessibilityLongPress",
-  NEXT: "GeckoView:AccessibilityNext",
-  PREVIOUS: "GeckoView:AccessibilityPrevious",
-  SCROLL_BACKWARD: "GeckoView:AccessibilityScrollBackward",
-  SCROLL_FORWARD: "GeckoView:AccessibilityScrollForward",
-  SET_SELECTION: "GeckoView:AccessibilitySetSelection",
-  VIEW_FOCUSED: "GeckoView:AccessibilityViewFocused",
-  CLEAR_CURSOR: "GeckoView:AccessibilityClearCursor",
-};
-
-const ACCESSFU_MESSAGE = {
-  DOSCROLL: "AccessFu:DoScroll",
-};
-
-const FRAME_SCRIPT = "chrome://global/content/accessibility/content-script.js";
-
-var AccessFu = {
-  /**
-   * A lazy getter for event handler that binds the scope to AccessFu object.
-   */
-  get handleEvent() {
-    delete this.handleEvent;
-    this.handleEvent = this._handleEvent.bind(this);
-    return this.handleEvent;
-  },
-
-  /**
-   * Start AccessFu mode.
-   */
-  enable: function enable() {
-    if (this._enabled) {
-      return;
-    }
-    this._enabled = true;
-
-    Services.obs.addObserver(this, "remote-browser-shown");
-    Services.obs.addObserver(this, "inprocess-browser-shown");
-    Services.ww.registerNotification(this);
-
-    for (let win of Services.wm.getEnumerator(null)) {
-      this._attachWindow(win);
-    }
-
-    Logger.info("AccessFu:Enabled");
-  },
-
-  /**
-   * Disable AccessFu and return to default interaction mode.
-   */
-  disable: function disable() {
-    if (!this._enabled) {
-      return;
-    }
-
-    this._enabled = false;
-
-    Services.obs.removeObserver(this, "remote-browser-shown");
-    Services.obs.removeObserver(this, "inprocess-browser-shown");
-    Services.ww.unregisterNotification(this);
-
-    for (let win of Services.wm.getEnumerator(null)) {
-      this._detachWindow(win);
-    }
-
-    if (this.doneCallback) {
-      this.doneCallback();
-      delete this.doneCallback;
-    }
-
-    Logger.info("AccessFu:Disabled");
-  },
-
-  receiveMessage: function receiveMessage(aMessage) {
-    Logger.debug(() => {
-      return ["Recieved", aMessage.name, JSON.stringify(aMessage.json)];
-    });
-
-    switch (aMessage.name) {
-      case ACCESSFU_MESSAGE.DOSCROLL:
-        this.Input.doScroll(aMessage.json, aMessage.target);
-        break;
-    }
-  },
-
-  _attachWindow: function _attachWindow(win) {
-    let wtype = win.document.documentElement.getAttribute("windowtype");
-    if (wtype != "navigator:browser" && wtype != "navigator:geckoview") {
-      // Don't attach to non-browser or geckoview windows.
-      return;
-    }
-
-    // Set up frame script
-    let mm = win.messageManager;
-    for (let messageName of Object.values(ACCESSFU_MESSAGE)) {
-      mm.addMessageListener(messageName, this);
-    }
-    mm.loadFrameScript(FRAME_SCRIPT, true);
-
-    win.addEventListener("TabSelect", this);
-    if (win.WindowEventDispatcher && !this._eventDispatcherListeners.has(win)) {
-      const listener = (event, data, callback) => {
-        this.onEvent(event, data, callback, win);
-      };
-      this._eventDispatcherListeners.set(win, listener);
-      // desktop mochitests don't have this.
-      win.WindowEventDispatcher.registerListener(
-        listener,
-        Object.values(GECKOVIEW_MESSAGE)
-      );
-    }
-  },
-
-  _detachWindow: function _detachWindow(win) {
-    let mm = win.messageManager;
-    mm.broadcastAsyncMessage("AccessFu:Stop");
-    mm.removeDelayedFrameScript(FRAME_SCRIPT);
-    for (let messageName of Object.values(ACCESSFU_MESSAGE)) {
-      mm.removeMessageListener(messageName, this);
-    }
-
-    win.removeEventListener("TabSelect", this);
-    if (win.WindowEventDispatcher && this._eventDispatcherListeners.has(win)) {
-      // desktop mochitests don't have this.
-      win.WindowEventDispatcher.unregisterListener(
-        this._eventDispatcherListeners.get(win),
-        Object.values(GECKOVIEW_MESSAGE)
-      );
-      this._eventDispatcherListeners.delete(win);
-    }
-  },
-
-  onEvent(event, data, callback, win) {
-    switch (event) {
-      case GECKOVIEW_MESSAGE.SETTINGS:
-        if (data.enabled) {
-          this._enable();
-        } else {
-          this._disable();
-        }
-        break;
-      case GECKOVIEW_MESSAGE.NEXT:
-      case GECKOVIEW_MESSAGE.PREVIOUS: {
-        let rule = "Simple";
-        if (data && data.rule && data.rule.length) {
-          rule =
-            data.rule.substr(0, 1).toUpperCase() +
-            data.rule.substr(1).toLowerCase();
-        }
-        let method = event.replace(/GeckoView:Accessibility(\w+)/, "move$1");
-        this.Input.moveCursor(method, rule, "gesture", win);
-        break;
-      }
-      case GECKOVIEW_MESSAGE.ACTIVATE:
-        this.Input.activateCurrent(data, win);
-        break;
-      case GECKOVIEW_MESSAGE.LONG_PRESS:
-        // XXX: Advertize long press on supported objects and implement action
-        break;
-      case GECKOVIEW_MESSAGE.SCROLL_FORWARD:
-        this.Input.androidScroll("forward", win);
-        break;
-      case GECKOVIEW_MESSAGE.SCROLL_BACKWARD:
-        this.Input.androidScroll("backward", win);
-        break;
-      case GECKOVIEW_MESSAGE.CURSOR_TO_FOCUSED:
-        this.autoMove({ moveToFocused: true }, win);
-        break;
-      case GECKOVIEW_MESSAGE.BY_GRANULARITY:
-        this.Input.moveByGranularity(data, win);
-        break;
-      case GECKOVIEW_MESSAGE.EXPLORE_BY_TOUCH:
-        this.Input.moveToPoint("Simple", ...data.coordinates, win);
-        break;
-      case GECKOVIEW_MESSAGE.SET_SELECTION:
-        this.Input.setSelection(data, win);
-        break;
-      case GECKOVIEW_MESSAGE.CLIPBOARD:
-        this.Input.clipboard(data, win);
-        break;
-      case GECKOVIEW_MESSAGE.CLEAR_CURSOR:
-        this.Input.clearCursor(win);
-    }
-  },
-
-  observe: function observe(aSubject, aTopic, aData) {
-    switch (aTopic) {
-      case "domwindowopened": {
-        let win = aSubject;
-        win.addEventListener(
-          "load",
-          () => {
-            this._attachWindow(win);
-          },
-          { once: true }
-        );
-        break;
-      }
-    }
-  },
-
-  _handleEvent: function _handleEvent(aEvent) {
-    switch (aEvent.type) {
-      case "TabSelect": {
-        if (this._focused) {
-          // We delay this for half a second so the awesomebar could close,
-          // and we could use the current coordinates for the content item.
-          // XXX TODO figure out how to avoid magic wait here.
-          this.autoMove({
-            delay: 500,
-            forcePresent: true,
-            noOpIfOnScreen: true,
-            moveMethod: "moveFirst",
-          });
-        }
-        break;
-      }
-      default:
-        break;
-    }
-  },
-
-  autoMove: function autoMove(aOptions, aWindow) {
-    const mm = Utils.getCurrentMessageManager(aWindow);
-    mm.sendAsyncMessage("AccessFu:AutoMove", aOptions);
-  },
-
-  // So we don't enable/disable twice
-  _enabled: false,
-
-  // Layerview is focused
-  _focused: false,
-
-  _eventDispatcherListeners: new WeakMap(),
-
-  /**
-   * Adjusts the given bounds that are defined in device display pixels
-   * to client-relative CSS pixels of the chrome window.
-   * @param {Rect} aJsonBounds the bounds to adjust
-   * @param {Window} aWindow the window containing the item
-   */
-  screenToClientBounds(aJsonBounds, aWindow) {
-    let bounds = new Rect(
-      aJsonBounds.left,
-      aJsonBounds.top,
-      aJsonBounds.right - aJsonBounds.left,
-      aJsonBounds.bottom - aJsonBounds.top
-    );
-    let { devicePixelRatio, mozInnerScreenX, mozInnerScreenY } = aWindow;
-
-    bounds = bounds.scale(1 / devicePixelRatio, 1 / devicePixelRatio);
-    bounds = bounds.translate(-mozInnerScreenX, -mozInnerScreenY);
-    return bounds.expandToIntegers();
-  },
-};
-
-var Input = {
-  moveToPoint: function moveToPoint(aRule, aX, aY, aWindow) {
-    Logger.debug("moveToPoint", aX, aY);
-    const mm = Utils.getCurrentMessageManager(aWindow);
-    mm.sendAsyncMessage("AccessFu:MoveToPoint", {
-      rule: aRule,
-      x: aX,
-      y: aY,
-      origin: "top",
-    });
-  },
-
-  moveCursor: function moveCursor(aAction, aRule, aInputType, aWindow) {
-    const mm = Utils.getCurrentMessageManager(aWindow);
-    mm.sendAsyncMessage("AccessFu:MoveCursor", {
-      action: aAction,
-      rule: aRule,
-      origin: "top",
-      inputType: aInputType,
-    });
-  },
-
-  androidScroll: function androidScroll(aDirection, aWindow) {
-    const mm = Utils.getCurrentMessageManager(aWindow);
-    mm.sendAsyncMessage("AccessFu:AndroidScroll", {
-      direction: aDirection,
-      origin: "top",
-    });
-  },
-
-  moveByGranularity: function moveByGranularity(aDetails, aWindow) {
-    const mm = Utils.getCurrentMessageManager(aWindow);
-    mm.sendAsyncMessage("AccessFu:MoveByGranularity", aDetails);
-  },
-
-  setSelection: function setSelection(aDetails, aWindow) {
-    const mm = Utils.getCurrentMessageManager(aWindow);
-    mm.sendAsyncMessage("AccessFu:SetSelection", aDetails);
-  },
-
-  clipboard: function clipboard(aDetails, aWindow) {
-    const mm = Utils.getCurrentMessageManager(aWindow);
-    mm.sendAsyncMessage("AccessFu:Clipboard", aDetails);
-  },
-
-  activateCurrent: function activateCurrent(aData, aWindow) {
-    let mm = Utils.getCurrentMessageManager(aWindow);
-    mm.sendAsyncMessage("AccessFu:Activate", { offset: 0 });
-  },
-
-  doScroll: function doScroll(aDetails, aBrowser) {
-    let horizontal = aDetails.horizontal;
-    let page = aDetails.page;
-    let win = aBrowser.ownerGlobal;
-    let winUtils = win.windowUtils;
-    let p = AccessFu.screenToClientBounds(aDetails.bounds, win).center();
-    winUtils.sendWheelEvent(
-      p.x,
-      p.y,
-      horizontal ? page : 0,
-      horizontal ? 0 : page,
-      0,
-      win.WheelEvent.DOM_DELTA_PAGE,
-      0,
-      0,
-      0,
-      0
-    );
-  },
-
-  clearCursor: function clearCursor(aWindow) {
-    const mm = Utils.getCurrentMessageManager(aWindow);
-    mm.sendAsyncMessage("AccessFu:ClearCursor");
-  },
-};
-AccessFu.Input = Input;
deleted file mode 100644
--- a/accessible/jsat/Constants.jsm
+++ /dev/null
@@ -1,73 +0,0 @@
-const { XPCOMUtils } = ChromeUtils.import(
-  "resource://gre/modules/XPCOMUtils.jsm"
-);
-
-const AndroidEvents = {
-  VIEW_CLICKED: 0x01,
-  VIEW_LONG_CLICKED: 0x02,
-  VIEW_SELECTED: 0x04,
-  VIEW_FOCUSED: 0x08,
-  VIEW_TEXT_CHANGED: 0x10,
-  WINDOW_STATE_CHANGED: 0x20,
-  VIEW_HOVER_ENTER: 0x80,
-  VIEW_HOVER_EXIT: 0x100,
-  WINDOW_CONTENT_CHANGED: 0x800,
-  VIEW_SCROLLED: 0x1000,
-  VIEW_TEXT_SELECTION_CHANGED: 0x2000,
-  ANNOUNCEMENT: 0x4000,
-  VIEW_ACCESSIBILITY_FOCUSED: 0x8000,
-  VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY: 0x20000,
-};
-
-function ConstantsMap(aObject, aPrefix, aMap = {}, aModifier = null) {
-  let offset = aPrefix.length;
-  for (var name in aObject) {
-    if (name.indexOf(aPrefix) === 0) {
-      aMap[name.slice(offset)] = aModifier
-        ? aModifier(aObject[name])
-        : aObject[name];
-    }
-  }
-
-  return aMap;
-}
-
-XPCOMUtils.defineLazyGetter(this, "Roles", function() {
-  return ConstantsMap(Ci.nsIAccessibleRole, "ROLE_");
-});
-
-XPCOMUtils.defineLazyGetter(this, "Events", function() {
-  return ConstantsMap(Ci.nsIAccessibleEvent, "EVENT_");
-});
-
-XPCOMUtils.defineLazyGetter(this, "Relations", function() {
-  return ConstantsMap(Ci.nsIAccessibleRelation, "RELATION_");
-});
-
-XPCOMUtils.defineLazyGetter(this, "Prefilters", function() {
-  return ConstantsMap(Ci.nsIAccessibleTraversalRule, "PREFILTER_");
-});
-
-XPCOMUtils.defineLazyGetter(this, "Filters", function() {
-  return ConstantsMap(Ci.nsIAccessibleTraversalRule, "FILTER_");
-});
-
-XPCOMUtils.defineLazyGetter(this, "States", function() {
-  let statesMap = ConstantsMap(Ci.nsIAccessibleStates, "STATE_", {}, val => {
-    return { base: val, extended: 0 };
-  });
-  ConstantsMap(Ci.nsIAccessibleStates, "EXT_STATE_", statesMap, val => {
-    return { base: 0, extended: val };
-  });
-  return statesMap;
-});
-
-var EXPORTED_SYMBOLS = [
-  "Roles",
-  "Events",
-  "Relations",
-  "Filters",
-  "States",
-  "Prefilters",
-  "AndroidEvents",
-];
deleted file mode 100644
--- a/accessible/jsat/ContentControl.jsm
+++ /dev/null
@@ -1,574 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-ChromeUtils.defineModuleGetter(
-  this,
-  "Utils",
-  "resource://gre/modules/accessibility/Utils.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "Logger",
-  "resource://gre/modules/accessibility/Utils.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "Roles",
-  "resource://gre/modules/accessibility/Constants.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "States",
-  "resource://gre/modules/accessibility/Constants.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "TraversalRules",
-  "resource://gre/modules/accessibility/Traversal.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "TraversalHelper",
-  "resource://gre/modules/accessibility/Traversal.jsm"
-);
-
-var EXPORTED_SYMBOLS = ["ContentControl"];
-
-const MOVEMENT_GRANULARITY_CHARACTER = 1;
-const MOVEMENT_GRANULARITY_WORD = 2;
-const MOVEMENT_GRANULARITY_LINE = 4;
-
-const CLIPBOARD_COPY = 0x4000;
-const CLIPBOARD_PASTE = 0x8000;
-const CLIPBOARD_CUT = 0x10000;
-
-function ContentControl(aContentScope) {
-  this._contentScope = Cu.getWeakReference(aContentScope);
-  this._childMessageSenders = new WeakMap();
-}
-
-this.ContentControl.prototype = {
-  messagesOfInterest: [
-    "AccessFu:Activate",
-    "AccessFu:AndroidScroll",
-    "AccessFu:AutoMove",
-    "AccessFu:ClearCursor",
-    "AccessFu:Clipboard",
-    "AccessFu:MoveByGranularity",
-    "AccessFu:MoveCursor",
-    "AccessFu:MoveToPoint",
-    "AccessFu:SetSelection",
-  ],
-
-  start: function cc_start() {
-    let cs = this._contentScope.get();
-    for (let message of this.messagesOfInterest) {
-      cs.addMessageListener(message, this);
-    }
-  },
-
-  stop: function cc_stop() {
-    let cs = this._contentScope.get();
-    for (let message of this.messagesOfInterest) {
-      cs.removeMessageListener(message, this);
-    }
-  },
-
-  get document() {
-    return this._contentScope.get().content.document;
-  },
-
-  get window() {
-    return this._contentScope.get().content;
-  },
-
-  get vc() {
-    return Utils.getVirtualCursor(this.document);
-  },
-
-  receiveMessage: function cc_receiveMessage(aMessage) {
-    Logger.debug(() => {
-      return [
-        "ContentControl.receiveMessage",
-        aMessage.name,
-        JSON.stringify(aMessage.json),
-      ];
-    });
-
-    // If we get an explicit message, we should immediately cancel any autoMove
-    this.cancelAutoMove();
-
-    try {
-      let func = this["handle" + aMessage.name.slice(9)]; // 'AccessFu:'.length
-      if (func) {
-        func.bind(this)(aMessage);
-      } else {
-        Logger.warning("ContentControl: Unhandled message:", aMessage.name);
-      }
-    } catch (x) {
-      Logger.logException(
-        x,
-        "Error handling message: " + JSON.stringify(aMessage.json)
-      );
-    }
-  },
-
-  handleAndroidScroll: function cc_handleAndroidScroll(aMessage) {
-    let vc = this.vc;
-    let position = vc.position;
-
-    if (aMessage.json.origin != "child" && this.sendToChild(vc, aMessage)) {
-      // Forwarded succesfully to child cursor.
-      return;
-    }
-
-    // Counter-intuitive, but scrolling backward (ie. up), actually should
-    // increase range values.
-    if (this.adjustRange(position, aMessage.json.direction === "backward")) {
-      return;
-    }
-
-    this._contentScope.get().sendAsyncMessage("AccessFu:DoScroll", {
-      bounds: Utils.getBounds(position),
-      page: aMessage.json.direction === "forward" ? 1 : -1,
-      horizontal: false,
-    });
-  },
-
-  handleMoveCursor: function cc_handleMoveCursor(aMessage) {
-    let origin = aMessage.json.origin;
-    let action = aMessage.json.action;
-    let adjustRange = aMessage.json.adjustRange;
-    let vc = this.vc;
-
-    if (origin != "child" && this.sendToChild(vc, aMessage)) {
-      // Forwarded succesfully to child cursor.
-      return;
-    }
-
-    if (adjustRange && this.adjustRange(vc.position, action === "moveNext")) {
-      return;
-    }
-
-    let moved = TraversalHelper.move(vc, action, aMessage.json.rule);
-
-    if (moved) {
-      if (origin === "child") {
-        // We just stepped out of a child, clear child cursor.
-        Utils.getMessageManagerForFrame(aMessage.target).sendAsyncMessage(
-          "AccessFu:ClearCursor",
-          {}
-        );
-      } else {
-        // We potentially landed on a new child cursor. If so, we want to
-        // either be on the first or last item in the child doc.
-        let childAction = action;
-        if (action === "moveNext") {
-          childAction = "moveFirst";
-        } else if (action === "movePrevious") {
-          childAction = "moveLast";
-        }
-
-        // Attempt to forward move to a potential child cursor in our
-        // new position.
-        this.sendToChild(vc, aMessage, { action: childAction }, true);
-      }
-    } else if (
-      !this._childMessageSenders.has(aMessage.target) &&
-      origin !== "top"
-    ) {
-      // We failed to move, and the message is not from a parent, so forward
-      // to it.
-      this.sendToParent(aMessage);
-    }
-  },
-
-  handleMoveToPoint: function cc_handleMoveToPoint(aMessage) {
-    let [x, y] = [aMessage.json.x, aMessage.json.y];
-    let rule = TraversalRules[aMessage.json.rule];
-
-    this.vc.moveToPoint(rule, x, y, true);
-  },
-
-  handleClearCursor: function cc_handleClearCursor(aMessage) {
-    let forwarded = this.sendToChild(this.vc, aMessage);
-    this.vc.position = null;
-    if (!forwarded) {
-      this._contentScope.get().sendAsyncMessage("AccessFu:CursorCleared");
-    }
-  },
-
-  handleAutoMove: function cc_handleAutoMove(aMessage) {
-    this.autoMove(null, aMessage.json);
-  },
-
-  handleActivate: function cc_handleActivate(aMessage) {
-    let activateAccessible = aAccessible => {
-      Logger.debug(() => {
-        return ["activateAccessible", Logger.accessibleToString(aAccessible)];
-      });
-
-      if (aAccessible.actionCount > 0) {
-        aAccessible.doAction(0);
-      } else {
-        let control = Utils.getEmbeddedControl(aAccessible);
-        if (control && control.actionCount > 0) {
-          control.doAction(0);
-        }
-
-        // XXX Some mobile widget sets do not expose actions properly
-        // (via ARIA roles, etc.), so we need to generate a click.
-        // Could possibly be made simpler in the future. Maybe core
-        // engine could expose nsCoreUtiles::DispatchMouseEvent()?
-        let docAcc = Utils.AccService.getAccessibleFor(this.document);
-        let docX = {},
-          docY = {},
-          docW = {},
-          docH = {};
-        docAcc.getBounds(docX, docY, docW, docH);
-
-        let objX = {},
-          objY = {},
-          objW = {},
-          objH = {};
-        aAccessible.getBounds(objX, objY, objW, objH);
-
-        let x = Math.round(objX.value - docX.value + objW.value / 2);
-        let y = Math.round(objY.value - docY.value + objH.value / 2);
-
-        let node = aAccessible.DOMNode || aAccessible.parent.DOMNode;
-
-        for (let eventType of ["mousedown", "mouseup"]) {
-          let evt = this.document.createEvent("MouseEvents");
-          evt.initMouseEvent(
-            eventType,
-            true,
-            true,
-            this.window,
-            x,
-            y,
-            0,
-            0,
-            0,
-            false,
-            false,
-            false,
-            false,
-            0,
-            null
-          );
-          node.dispatchEvent(evt);
-        }
-      }
-    };
-
-    let focusedAcc = Utils.AccService.getAccessibleFor(
-      this.document.activeElement
-    );
-    if (
-      focusedAcc &&
-      this.vc.position === focusedAcc &&
-      focusedAcc.role === Roles.ENTRY
-    ) {
-      let accText = focusedAcc.QueryInterface(Ci.nsIAccessibleText);
-      let newOffset = aMessage.json.offset;
-      if (newOffset >= 0 && newOffset <= accText.characterCount) {
-        accText.caretOffset = newOffset;
-      }
-
-      return;
-    }
-
-    // recursively find a descendant that is activatable.
-    let getActivatableDescendant = aAccessible => {
-      if (aAccessible.actionCount > 0) {
-        return aAccessible;
-      }
-
-      for (let acc = aAccessible.firstChild; acc; acc = acc.nextSibling) {
-        let activatable = getActivatableDescendant(acc);
-        if (activatable) {
-          return activatable;
-        }
-      }
-
-      return null;
-    };
-
-    let vc = this.vc;
-    if (!this.sendToChild(vc, aMessage, null, true)) {
-      let position = vc.position;
-      activateAccessible(getActivatableDescendant(position) || position);
-    }
-  },
-
-  adjustRange: function cc_adjustRange(aAccessible, aStepUp) {
-    let acc = Utils.getEmbeddedControl(aAccessible) || aAccessible;
-    try {
-      acc.QueryInterface(Ci.nsIAccessibleValue);
-    } catch (x) {
-      // This is not an adjustable, return false.
-      return false;
-    }
-
-    let elem = acc.DOMNode;
-    if (!elem) {
-      return false;
-    }
-
-    if (elem.tagName === "INPUT" && elem.type === "range") {
-      elem[aStepUp ? "stepDown" : "stepUp"]();
-      let evt = this.document.createEvent("UIEvent");
-      evt.initEvent("change", true, true);
-      elem.dispatchEvent(evt);
-    } else {
-      let evt = this.document.createEvent("KeyboardEvent");
-      let keycode = aStepUp ? evt.DOM_VK_DOWN : evt.DOM_VK_UP;
-      evt.initKeyEvent(
-        "keypress",
-        false,
-        true,
-        null,
-        false,
-        false,
-        false,
-        false,
-        keycode,
-        0
-      );
-      elem.dispatchEvent(evt);
-    }
-
-    return true;
-  },
-
-  handleMoveByGranularity: function cc_handleMoveByGranularity(aMessage) {
-    const { direction, granularity, select } = aMessage.json;
-    const focusedAcc = Utils.AccService.getAccessibleFor(
-      this.document.activeElement
-    );
-    const editable =
-      focusedAcc && Utils.getState(focusedAcc).contains(States.EDITABLE)
-        ? focusedAcc.QueryInterface(Ci.nsIAccessibleText)
-        : null;
-
-    if (editable) {
-      const caretOffset = editable.caretOffset;
-      this.vc.setTextRange(editable, caretOffset, caretOffset, false);
-    }
-
-    let pivotGranularity;
-    switch (granularity) {
-      case MOVEMENT_GRANULARITY_CHARACTER:
-        pivotGranularity = Ci.nsIAccessiblePivot.CHAR_BOUNDARY;
-        break;
-      case MOVEMENT_GRANULARITY_WORD:
-        pivotGranularity = Ci.nsIAccessiblePivot.WORD_BOUNDARY;
-        break;
-      case MOVEMENT_GRANULARITY_LINE:
-        pivotGranularity = Ci.nsIAccessiblePivot.LINE_BOUNDARY;
-        break;
-      default:
-        return;
-    }
-
-    if (direction === "Previous") {
-      this.vc.movePreviousByText(pivotGranularity);
-    } else if (direction === "Next") {
-      this.vc.moveNextByText(pivotGranularity);
-    }
-
-    if (editable) {
-      const newOffset =
-        direction === "Next" ? this.vc.endOffset : this.vc.startOffset;
-      if (select) {
-        let anchor = editable.caretOffset;
-        if (editable.selectionCount) {
-          const [startSel, endSel] = Utils.getTextSelection(editable);
-          anchor = startSel == anchor ? endSel : startSel;
-        }
-        editable.setSelectionBounds(0, anchor, newOffset);
-      } else {
-        editable.caretOffset = newOffset;
-      }
-    }
-  },
-
-  handleSetSelection: function cc_handleSetSelection(aMessage) {
-    const { start, end } = aMessage.json;
-    const focusedAcc = Utils.AccService.getAccessibleFor(
-      this.document.activeElement
-    );
-    if (focusedAcc) {
-      const accText = focusedAcc.QueryInterface(Ci.nsIAccessibleText);
-      if (start == end) {
-        accText.caretOffset = start;
-      } else {
-        accText.setSelectionBounds(0, start, end);
-      }
-    }
-  },
-
-  handleClipboard: function cc_handleClipboard(aMessage) {
-    const { action } = aMessage.json;
-    const focusedAcc = Utils.AccService.getAccessibleFor(
-      this.document.activeElement
-    );
-    if (focusedAcc) {
-      const [startSel, endSel] = Utils.getTextSelection(focusedAcc);
-      const editText = focusedAcc.QueryInterface(Ci.nsIAccessibleEditableText);
-      switch (action) {
-        case CLIPBOARD_COPY:
-          if (startSel != endSel) {
-            editText.copyText(startSel, endSel);
-          }
-          break;
-        case CLIPBOARD_PASTE:
-          if (startSel != endSel) {
-            editText.deleteText(startSel, endSel);
-          }
-          editText.pasteText(startSel);
-          break;
-        case CLIPBOARD_CUT:
-          if (startSel != endSel) {
-            editText.cutText(startSel, endSel);
-          }
-          break;
-      }
-    }
-  },
-
-  getChildCursor: function cc_getChildCursor(aAccessible) {
-    let acc = aAccessible || this.vc.position;
-    if (Utils.isAliveAndVisible(acc) && acc.role === Roles.INTERNAL_FRAME) {
-      let domNode = acc.DOMNode;
-      let mm = this._childMessageSenders.get(domNode, null);
-      if (!mm) {
-        mm = Utils.getMessageManagerForFrame(domNode);
-        mm.addWeakMessageListener("AccessFu:MoveCursor", this);
-        this._childMessageSenders.set(domNode, mm);
-      }
-
-      return mm;
-    }
-
-    return null;
-  },
-
-  sendToChild: function cc_sendToChild(
-    aVirtualCursor,
-    aMessage,
-    aReplacer,
-    aFocus
-  ) {
-    let position = aVirtualCursor.position;
-    let mm = this.getChildCursor(position);
-    if (!mm) {
-      return false;
-    }
-
-    if (aFocus) {
-      position.takeFocus();
-    }
-
-    // XXX: This is a silly way to make a deep copy
-    let newJSON = JSON.parse(JSON.stringify(aMessage.json));
-    newJSON.origin = "parent";
-    for (let attr in aReplacer) {
-      newJSON[attr] = aReplacer[attr];
-    }
-
-    mm.sendAsyncMessage(aMessage.name, newJSON);
-    return true;
-  },
-
-  sendToParent: function cc_sendToParent(aMessage) {
-    // XXX: This is a silly way to make a deep copy
-    let newJSON = JSON.parse(JSON.stringify(aMessage.json));
-    newJSON.origin = "child";
-    aMessage.target.sendAsyncMessage(aMessage.name, newJSON);
-  },
-
-  /**
-   * Move cursor.
-   * aOptions could have any of these fields:
-   * - delay: in ms, before actual move is performed. Another autoMove call
-   *    would cancel it. Useful if we want to wait for a possible trailing
-   *    focus move. Default 0.
-   * - noOpIfOnScreen: if accessible is alive and visible, don't do anything.
-   * - moveToFocused: if there is a focused accessible move to that. This takes
-   *    precedence over given anchor.
-   * - moveMethod: pivot move method to use, default is 'moveNext',
-   */
-  autoMove: function cc_autoMove(aAnchor, aOptions = {}) {
-    this.cancelAutoMove();
-
-    let moveFunc = () => {
-      let vc = this.vc;
-      let acc = aAnchor;
-      let rule = aOptions.onScreenOnly
-        ? TraversalRules.SimpleOnScreen
-        : TraversalRules.Simple;
-
-      if (
-        aOptions.noOpIfOnScreen &&
-        Utils.isAliveAndVisible(vc.position, true)
-      ) {
-        return;
-      }
-
-      if (aOptions.moveToFocused) {
-        acc =
-          Utils.AccService.getAccessibleFor(this.document.activeElement) || acc;
-      }
-
-      let moved = false;
-      let moveMethod = aOptions.moveMethod || "moveNext"; // default is moveNext
-      let moveFirstOrLast = moveMethod in ["moveFirst", "moveLast"];
-      if (!moveFirstOrLast || acc) {
-        // We either need next/previous or there is an anchor we need to use.
-        moved = vc[moveFirstOrLast ? "moveNext" : moveMethod](
-          rule,
-          acc,
-          true,
-          true
-        );
-      }
-      if (moveFirstOrLast && !moved) {
-        // We move to first/last after no anchor move happened or succeeded.
-        moved = vc[moveMethod](rule, true);
-      }
-
-      this.sendToChild(
-        vc,
-        {
-          name: "AccessFu:AutoMove",
-          json: {
-            moveMethod: aOptions.moveMethod,
-            moveToFocused: aOptions.moveToFocused,
-            noOpIfOnScreen: true,
-          },
-        },
-        null,
-        true
-      );
-    };
-
-    if (aOptions.delay) {
-      this._autoMove = this.window.setTimeout(moveFunc, aOptions.delay);
-    } else {
-      moveFunc();
-    }
-  },
-
-  cancelAutoMove: function cc_cancelAutoMove() {
-    this.window.clearTimeout(this._autoMove);
-    this._autoMove = 0;
-  },
-
-  QueryInterface: ChromeUtils.generateQI([
-    Ci.nsISupportsWeakReference,
-    Ci.nsIMessageListener,
-  ]),
-};
deleted file mode 100644
--- a/accessible/jsat/EventManager.jsm
+++ /dev/null
@@ -1,301 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-ChromeUtils.defineModuleGetter(
-  this,
-  "Services",
-  "resource://gre/modules/Services.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "Utils",
-  "resource://gre/modules/accessibility/Utils.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "Logger",
-  "resource://gre/modules/accessibility/Utils.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "Events",
-  "resource://gre/modules/accessibility/Constants.jsm"
-);
-
-var EXPORTED_SYMBOLS = ["EventManager"];
-
-function EventManager(aContentScope) {
-  this.contentScope = aContentScope;
-  this.addEventListener = this.contentScope.addEventListener.bind(
-    this.contentScope
-  );
-  this.removeEventListener = this.contentScope.removeEventListener.bind(
-    this.contentScope
-  );
-  this.sendMsgFunc = this.contentScope.sendAsyncMessage.bind(this.contentScope);
-}
-
-this.EventManager.prototype = {
-  start: function start() {
-    try {
-      if (!this._started) {
-        Logger.debug("EventManager.start");
-
-        this._started = true;
-
-        AccessibilityEventObserver.addListener(this);
-
-        this._preDialogPosition = new WeakMap();
-      }
-    } catch (x) {
-      Logger.logException(x, "Failed to start EventManager");
-    }
-  },
-
-  // XXX: Stop is not called when the tab is closed (|TabClose| event is too
-  // late). It is only called when the AccessFu is disabled explicitly.
-  stop: function stop() {
-    if (!this._started) {
-      return;
-    }
-    Logger.debug("EventManager.stop");
-    AccessibilityEventObserver.removeListener(this);
-    try {
-      this._preDialogPosition = new WeakMap();
-    } catch (x) {
-      // contentScope is dead.
-    } finally {
-      this._started = false;
-    }
-  },
-
-  get contentControl() {
-    return this.contentScope._jsat_contentControl;
-  },
-
-  handleAccEvent: function handleAccEvent(aEvent) {
-    Logger.debug(() => {
-      return [
-        "A11yEvent",
-        Logger.eventToString(aEvent),
-        Logger.accessibleToString(aEvent.accessible),
-      ];
-    });
-
-    // Don't bother with non-content events in firefox.
-    if (
-      Utils.MozBuildApp == "browser" &&
-      aEvent.eventType != Events.VIRTUALCURSOR_CHANGED &&
-      // XXX Bug 442005 results in DocAccessible::getDocType returning
-      // NS_ERROR_FAILURE. Checking for aEvent.accessibleDocument.docType ==
-      // 'window' does not currently work.
-      (aEvent.accessibleDocument.DOMDocument.doctype &&
-        aEvent.accessibleDocument.DOMDocument.doctype.name === "window")
-    ) {
-      return;
-    }
-
-    switch (aEvent.eventType) {
-      case Events.TEXT_CARET_MOVED: {
-        if (
-          aEvent.accessible != aEvent.accessibleDocument &&
-          !aEvent.isFromUserInput
-        ) {
-          // If caret moves in document without direct user
-          // we are probably stepping through results in find-in-page.
-          let acc = Utils.getTextLeafForOffset(
-            aEvent.accessible,
-            aEvent.QueryInterface(Ci.nsIAccessibleCaretMoveEvent).caretOffset
-          );
-          this.contentControl.autoMove(acc);
-        }
-        break;
-      }
-      case Events.NAME_CHANGE: {
-        // XXX: Port to Android
-        break;
-      }
-      case Events.SCROLLING_START: {
-        this.contentControl.autoMove(aEvent.accessible);
-        break;
-      }
-      case Events.SHOW: {
-        // XXX: Port to Android
-        break;
-      }
-      case Events.HIDE: {
-        // XXX: Port to Android
-        break;
-      }
-      case Events.VALUE_CHANGE: {
-        // XXX: Port to Android
-        break;
-      }
-    }
-  },
-
-  QueryInterface: ChromeUtils.generateQI([
-    Ci.nsISupportsWeakReference,
-    Ci.nsIObserver,
-  ]),
-};
-
-const AccessibilityEventObserver = {
-  /**
-   * A WeakMap containing [content, EventManager] pairs.
-   */
-  eventManagers: new WeakMap(),
-
-  /**
-   * A total number of registered eventManagers.
-   */
-  listenerCount: 0,
-
-  /**
-   * An indicator of an active 'accessible-event' observer.
-   */
-  started: false,
-
-  /**
-   * Start an AccessibilityEventObserver.
-   */
-  start: function start() {
-    if (this.started || this.listenerCount === 0) {
-      return;
-    }
-    Services.obs.addObserver(this, "accessible-event");
-    this.started = true;
-  },
-
-  /**
-   * Stop an AccessibilityEventObserver.
-   */
-  stop: function stop() {
-    if (!this.started) {
-      return;
-    }
-    Services.obs.removeObserver(this, "accessible-event");
-    // Clean up all registered event managers.
-    this.eventManagers = new WeakMap();
-    this.listenerCount = 0;
-    this.started = false;
-  },
-
-  /**
-   * Register an EventManager and start listening to the
-   * 'accessible-event' messages.
-   *
-   * @param aEventManager EventManager
-   *        An EventManager object that was loaded into the specific content.
-   */
-  addListener: function addListener(aEventManager) {
-    let content = aEventManager.contentScope.content;
-    if (!this.eventManagers.has(content)) {
-      this.listenerCount++;
-    }
-    this.eventManagers.set(content, aEventManager);
-    // Since at least one EventManager was registered, start listening.
-    Logger.debug(
-      "AccessibilityEventObserver.addListener. Total:",
-      this.listenerCount
-    );
-    this.start();
-  },
-
-  /**
-   * Unregister an EventManager and, optionally, stop listening to the
-   * 'accessible-event' messages.
-   *
-   * @param aEventManager EventManager
-   *        An EventManager object that was stopped in the specific content.
-   */
-  removeListener: function removeListener(aEventManager) {
-    let content = aEventManager.contentScope.content;
-    if (!this.eventManagers.delete(content)) {
-      return;
-    }
-    this.listenerCount--;
-    Logger.debug(
-      "AccessibilityEventObserver.removeListener. Total:",
-      this.listenerCount
-    );
-    if (this.listenerCount === 0) {
-      // If there are no EventManagers registered at the moment, stop listening
-      // to the 'accessible-event' messages.
-      this.stop();
-    }
-  },
-
-  /**
-   * Lookup an EventManager for a specific content. If the EventManager is not
-   * found, walk up the hierarchy of parent windows.
-   * @param content Window
-   *        A content Window used to lookup the corresponding EventManager.
-   */
-  getListener: function getListener(content) {
-    let eventManager = this.eventManagers.get(content);
-    if (eventManager) {
-      return eventManager;
-    }
-    let parent = content.parent;
-    if (parent === content) {
-      // There is no parent or the parent is of a different type.
-      return null;
-    }
-    return this.getListener(parent);
-  },
-
-  /**
-   * Handle the 'accessible-event' message.
-   */
-  observe: function observe(aSubject, aTopic, aData) {
-    if (aTopic !== "accessible-event") {
-      return;
-    }
-    let event = aSubject.QueryInterface(Ci.nsIAccessibleEvent);
-    if (!event.accessibleDocument) {
-      Logger.warning(
-        "AccessibilityEventObserver.observe: no accessible document:",
-        Logger.eventToString(event),
-        "accessible:",
-        Logger.accessibleToString(event.accessible)
-      );
-      return;
-    }
-    let content;
-    try {
-      content = event.accessibleDocument.window;
-    } catch (e) {
-      Logger.warning(
-        "AccessibilityEventObserver.observe: no window for accessible document:",
-        Logger.eventToString(event),
-        "accessible:",
-        Logger.accessibleToString(event.accessible)
-      );
-      return;
-    }
-    // Match the content window to its EventManager.
-    let eventManager = this.getListener(content);
-    if (!eventManager || !eventManager._started) {
-      if (Utils.MozBuildApp === "browser" && !content.isChromeWindow) {
-        Logger.warning(
-          "AccessibilityEventObserver.observe: ignored event:",
-          Logger.eventToString(event),
-          "accessible:",
-          Logger.accessibleToString(event.accessible),
-          "document:",
-          Logger.accessibleToString(event.accessibleDocument)
-        );
-      }
-      return;
-    }
-    try {
-      eventManager.handleAccEvent(event);
-    } catch (x) {
-      Logger.logException(x, "Error handing accessible event");
-    }
-  },
-};
deleted file mode 100644
--- a/accessible/jsat/Traversal.jsm
+++ /dev/null
@@ -1,433 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-var EXPORTED_SYMBOLS = ["TraversalRules", "TraversalHelper"]; // jshint ignore:line
-
-const { PrefCache, Utils } = ChromeUtils.import(
-  "resource://gre/modules/accessibility/Utils.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "Roles", // jshint ignore:line
-  "resource://gre/modules/accessibility/Constants.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "Filters", // jshint ignore:line
-  "resource://gre/modules/accessibility/Constants.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "States", // jshint ignore:line
-  "resource://gre/modules/accessibility/Constants.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "Prefilters", // jshint ignore:line
-  "resource://gre/modules/accessibility/Constants.jsm"
-);
-
-var gSkipEmptyImages = new PrefCache(
-  "accessibility.accessfu.skip_empty_images"
-);
-
-function BaseTraversalRule(aRoles, aMatchFunc, aPreFilter, aContainerRule) {
-  this._explicitMatchRoles = new Set(aRoles);
-  this._matchRoles = aRoles;
-  if (aRoles.length) {
-    if (!aRoles.includes(Roles.LABEL)) {
-      this._matchRoles.push(Roles.LABEL);
-    }
-    if (!aRoles.includes(Roles.INTERNAL_FRAME)) {
-      // Used for traversing in to child OOP frames.
-      this._matchRoles.push(Roles.INTERNAL_FRAME);
-    }
-  }
-  this._matchFunc =
-    aMatchFunc ||
-    function() {
-      return Filters.MATCH;
-    };
-  this.preFilter = aPreFilter || gSimplePreFilter;
-  this.containerRule = aContainerRule;
-}
-
-BaseTraversalRule.prototype = {
-  getMatchRoles: function BaseTraversalRule_getmatchRoles() {
-    return this._matchRoles;
-  },
-
-  match: function BaseTraversalRule_match(aAccessible) {
-    let role = aAccessible.role;
-    if (role == Roles.INTERNAL_FRAME) {
-      return Utils.getMessageManagerForFrame(aAccessible.DOMNode)
-        ? Filters.MATCH | Filters.IGNORE_SUBTREE
-        : Filters.IGNORE;
-    }
-
-    if (this._explicitMatchRoles.has(role) || !this._explicitMatchRoles.size) {
-      return this._matchFunc(aAccessible);
-    }
-
-    return Filters.IGNORE;
-  },
-
-  QueryInterface: ChromeUtils.generateQI([Ci.nsIAccessibleTraversalRule]),
-};
-
-var gSimpleTraversalRoles = [
-  Roles.MENUITEM,
-  Roles.LINK,
-  Roles.PAGETAB,
-  Roles.GRAPHIC,
-  Roles.STATICTEXT,
-  Roles.TEXT_LEAF,
-  Roles.PUSHBUTTON,
-  Roles.CHECKBUTTON,
-  Roles.RADIOBUTTON,
-  Roles.COMBOBOX,
-  Roles.PROGRESSBAR,
-  Roles.BUTTONDROPDOWN,
-  Roles.BUTTONMENU,
-  Roles.CHECK_MENU_ITEM,
-  Roles.PASSWORD_TEXT,
-  Roles.RADIO_MENU_ITEM,
-  Roles.TOGGLE_BUTTON,
-  Roles.ENTRY,
-  Roles.KEY,
-  Roles.HEADER,
-  Roles.HEADING,
-  Roles.SLIDER,
-  Roles.SPINBUTTON,
-  Roles.OPTION,
-  Roles.LISTITEM,
-  Roles.GRID_CELL,
-  Roles.COLUMNHEADER,
-  Roles.ROWHEADER,
-  Roles.STATUSBAR,
-  Roles.SWITCH,
-  Roles.MATHML_MATH,
-];
-
-var gSimpleMatchFunc = function gSimpleMatchFunc(aAccessible) {
-  // An object is simple, if it either has a single child lineage,
-  // or has a flat subtree.
-  function isSingleLineage(acc) {
-    for (let child = acc; child; child = child.firstChild) {
-      if (Utils.visibleChildCount(child) > 1) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  function isFlatSubtree(acc) {
-    for (let child = acc.firstChild; child; child = child.nextSibling) {
-      // text leafs inherit the actionCount of any ancestor that has a click
-      // listener.
-      if ([Roles.TEXT_LEAF, Roles.STATICTEXT].includes(child.role)) {
-        continue;
-      }
-      if (Utils.visibleChildCount(child) > 0 || child.actionCount > 0) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  switch (aAccessible.role) {
-    case Roles.COMBOBOX:
-      // We don't want to ignore the subtree because this is often
-      // where the list box hangs out.
-      return Filters.MATCH;
-    case Roles.TEXT_LEAF: {
-      // Nameless text leaves are boring, skip them.
-      let name = aAccessible.name;
-      return name && name.trim() ? Filters.MATCH : Filters.IGNORE;
-    }
-    case Roles.STATICTEXT:
-      // Ignore prefix static text in list items. They are typically bullets or numbers.
-      return Utils.isListItemDecorator(aAccessible)
-        ? Filters.IGNORE
-        : Filters.MATCH;
-    case Roles.GRAPHIC:
-      return TraversalRules._shouldSkipImage(aAccessible);
-    case Roles.HEADER:
-    case Roles.HEADING:
-    case Roles.COLUMNHEADER:
-    case Roles.ROWHEADER:
-    case Roles.STATUSBAR:
-      if (
-        (aAccessible.childCount > 0 || aAccessible.name) &&
-        (isSingleLineage(aAccessible) || isFlatSubtree(aAccessible))
-      ) {
-        return Filters.MATCH | Filters.IGNORE_SUBTREE;
-      }
-      return Filters.IGNORE;
-    case Roles.GRID_CELL:
-      return isSingleLineage(aAccessible) || isFlatSubtree(aAccessible)
-        ? Filters.MATCH | Filters.IGNORE_SUBTREE
-        : Filters.IGNORE;
-    case Roles.LISTITEM: {
-      let item =
-        aAccessible.childCount === 2 &&
-        aAccessible.firstChild.role === Roles.STATICTEXT
-          ? aAccessible.lastChild
-          : aAccessible;
-      return isSingleLineage(item) || isFlatSubtree(item)
-        ? Filters.MATCH | Filters.IGNORE_SUBTREE
-        : Filters.IGNORE;
-    }
-    default:
-      // Ignore the subtree, if there is one. So that we don't land on
-      // the same content that was already presented by its parent.
-      return Filters.MATCH | Filters.IGNORE_SUBTREE;
-  }
-};
-
-var gSimplePreFilter =
-  Prefilters.DEFUNCT |
-  Prefilters.INVISIBLE |
-  Prefilters.TRANSPARENT |
-  Prefilters.PLATFORM_PRUNED;
-
-var TraversalRules = {
-  // jshint ignore:line
-  Simple: new BaseTraversalRule(gSimpleTraversalRoles, gSimpleMatchFunc),
-
-  SimpleOnScreen: new BaseTraversalRule(
-    gSimpleTraversalRoles,
-    gSimpleMatchFunc,
-    gSimplePreFilter | Prefilters.OFFSCREEN
-  ),
-
-  Anchor: new BaseTraversalRule([Roles.LINK], function Anchor_match(
-    aAccessible
-  ) {
-    // We want to ignore links, only focus named anchors.
-    if (Utils.getState(aAccessible).contains(States.LINKED)) {
-      return Filters.IGNORE;
-    }
-    return Filters.MATCH;
-  }),
-
-  Button: new BaseTraversalRule([
-    Roles.PUSHBUTTON,
-    Roles.SPINBUTTON,
-    Roles.TOGGLE_BUTTON,
-    Roles.BUTTONDROPDOWN,
-    Roles.BUTTONDROPDOWNGRID,
-  ]),
-
-  Combobox: new BaseTraversalRule([Roles.COMBOBOX, Roles.LISTBOX]),
-
-  Landmark: new BaseTraversalRule(
-    [],
-    function Landmark_match(aAccessible) {
-      return Utils.getLandmarkName(aAccessible)
-        ? Filters.MATCH
-        : Filters.IGNORE;
-    },
-    null,
-    true
-  ),
-
-  /* A rule for Android's section navigation, lands on landmarks, regions, and
-     on headings to aid navigation of traditionally structured documents */
-  Section: new BaseTraversalRule(
-    [],
-    function Section_match(aAccessible) {
-      if (aAccessible.role === Roles.HEADING) {
-        return Filters.MATCH;
-      }
-
-      let matchedRole = Utils.matchRoles(aAccessible, [
-        "banner",
-        "complementary",
-        "contentinfo",
-        "main",
-        "navigation",
-        "search",
-        "region",
-      ]);
-
-      return matchedRole ? Filters.MATCH : Filters.IGNORE;
-    },
-    null,
-    true
-  ),
-
-  Entry: new BaseTraversalRule([Roles.ENTRY, Roles.PASSWORD_TEXT]),
-
-  FormElement: new BaseTraversalRule([
-    Roles.PUSHBUTTON,
-    Roles.SPINBUTTON,
-    Roles.TOGGLE_BUTTON,
-    Roles.BUTTONDROPDOWN,
-    Roles.BUTTONDROPDOWNGRID,
-    Roles.COMBOBOX,
-    Roles.LISTBOX,
-    Roles.ENTRY,
-    Roles.PASSWORD_TEXT,
-    Roles.PAGETAB,
-    Roles.RADIOBUTTON,
-    Roles.RADIO_MENU_ITEM,
-    Roles.SLIDER,
-    Roles.CHECKBUTTON,
-    Roles.CHECK_MENU_ITEM,
-    Roles.SWITCH,
-  ]),
-
-  Graphic: new BaseTraversalRule([Roles.GRAPHIC], function Graphic_match(
-    aAccessible
-  ) {
-    return TraversalRules._shouldSkipImage(aAccessible);
-  }),
-
-  Heading: new BaseTraversalRule([Roles.HEADING], function Heading_match(
-    aAccessible
-  ) {
-    return aAccessible.childCount > 0 ? Filters.MATCH : Filters.IGNORE;
-  }),
-
-  ListItem: new BaseTraversalRule([Roles.LISTITEM, Roles.TERM]),
-
-  Link: new BaseTraversalRule([Roles.LINK], function Link_match(aAccessible) {
-    // We want to ignore anchors, only focus real links.
-    if (Utils.getState(aAccessible).contains(States.LINKED)) {
-      return Filters.MATCH;
-    }
-    return Filters.IGNORE;
-  }),
-
-  /* For TalkBack's "Control" granularity. Form conrols and links */
-  Control: new BaseTraversalRule(
-    [
-      Roles.PUSHBUTTON,
-      Roles.SPINBUTTON,
-      Roles.TOGGLE_BUTTON,
-      Roles.BUTTONDROPDOWN,
-      Roles.BUTTONDROPDOWNGRID,
-      Roles.COMBOBOX,
-      Roles.LISTBOX,
-      Roles.ENTRY,
-      Roles.PASSWORD_TEXT,
-      Roles.PAGETAB,
-      Roles.RADIOBUTTON,
-      Roles.RADIO_MENU_ITEM,
-      Roles.SLIDER,
-      Roles.CHECKBUTTON,
-      Roles.CHECK_MENU_ITEM,
-      Roles.SWITCH,
-      Roles.LINK,
-      Roles.MENUITEM,
-    ],
-    function Control_match(aAccessible) {
-      // We want to ignore anchors, only focus real links.
-      if (
-        aAccessible.role == Roles.LINK &&
-        !Utils.getState(aAccessible).contains(States.LINKED)
-      ) {
-        return Filters.IGNORE;
-      }
-      return Filters.MATCH;
-    }
-  ),
-
-  List: new BaseTraversalRule(
-    [Roles.LIST, Roles.DEFINITION_LIST],
-    null,
-    null,
-    true
-  ),
-
-  PageTab: new BaseTraversalRule([Roles.PAGETAB]),
-
-  Paragraph: new BaseTraversalRule(
-    [Roles.PARAGRAPH, Roles.SECTION],
-    function Paragraph_match(aAccessible) {
-      for (
-        let child = aAccessible.firstChild;
-        child;
-        child = child.nextSibling
-      ) {
-        if (child.role === Roles.TEXT_LEAF) {
-          return Filters.MATCH | Filters.IGNORE_SUBTREE;
-        }
-      }
-
-      return Filters.IGNORE;
-    }
-  ),
-
-  RadioButton: new BaseTraversalRule([
-    Roles.RADIOBUTTON,
-    Roles.RADIO_MENU_ITEM,
-  ]),
-
-  Separator: new BaseTraversalRule([Roles.SEPARATOR]),
-
-  Table: new BaseTraversalRule([Roles.TABLE]),
-
-  Checkbox: new BaseTraversalRule([
-    Roles.CHECKBUTTON,
-    Roles.CHECK_MENU_ITEM,
-    Roles.SWITCH /* A type of checkbox that represents on/off values */,
-  ]),
-
-  _shouldSkipImage: function _shouldSkipImage(aAccessible) {
-    if (gSkipEmptyImages.value && aAccessible.name === "") {
-      return Filters.IGNORE;
-    }
-    return Filters.MATCH;
-  },
-};
-
-var TraversalHelper = {
-  _helperPivotCache: null,
-
-  get helperPivotCache() {
-    delete this.helperPivotCache;
-    this.helperPivotCache = new WeakMap();
-    return this.helperPivotCache;
-  },
-
-  getHelperPivot: function TraversalHelper_getHelperPivot(aRoot) {
-    let pivot = this.helperPivotCache.get(aRoot.DOMNode);
-    if (!pivot) {
-      pivot = Utils.AccService.createAccessiblePivot(aRoot);
-      this.helperPivotCache.set(aRoot.DOMNode, pivot);
-    }
-
-    return pivot;
-  },
-
-  move: function TraversalHelper_move(aVirtualCursor, aMethod, aRule) {
-    let rule = TraversalRules[aRule];
-
-    if (rule.containerRule) {
-      let moved = false;
-      let helperPivot = this.getHelperPivot(aVirtualCursor.root);
-      helperPivot.position = aVirtualCursor.position;
-
-      // We continue to step through containers until there is one with an
-      // atomic child (via 'Simple') on which we could land.
-      while (!moved) {
-        if (helperPivot[aMethod](rule)) {
-          aVirtualCursor.modalRoot = helperPivot.position;
-          moved = aVirtualCursor.moveFirst(TraversalRules.Simple);
-          aVirtualCursor.modalRoot = null;
-        } else {
-          // If we failed to step to another container, break and return false.
-          break;
-        }
-      }
-
-      return moved;
-    }
-    return aVirtualCursor[aMethod](rule);
-  },
-};
deleted file mode 100644
--- a/accessible/jsat/Utils.jsm
+++ /dev/null
@@ -1,1037 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-ChromeUtils.defineModuleGetter(
-  this,
-  "Services", // jshint ignore:line
-  "resource://gre/modules/Services.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "Rect", // jshint ignore:line
-  "resource://gre/modules/Geometry.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "Roles", // jshint ignore:line
-  "resource://gre/modules/accessibility/Constants.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "Events", // jshint ignore:line
-  "resource://gre/modules/accessibility/Constants.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "Relations", // jshint ignore:line
-  "resource://gre/modules/accessibility/Constants.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "States", // jshint ignore:line
-  "resource://gre/modules/accessibility/Constants.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "PluralForm", // jshint ignore:line
-  "resource://gre/modules/PluralForm.jsm"
-);
-
-var EXPORTED_SYMBOLS = ["Utils", "Logger", "PivotContext", "PrefCache"]; // jshint ignore:line
-
-var Utils = {
-  // jshint ignore:line
-  _buildAppMap: {
-    "{3c2e2abc-06d4-11e1-ac3b-374f68613e61}": "b2g",
-    "{d1bfe7d9-c01e-4237-998b-7b5f960a4314}": "graphene",
-    "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}": "browser",
-    "{aa3c5121-dab2-40e2-81ca-7ea25febc110}": "mobile/android",
-  },
-
-  get AccService() {
-    if (!this._AccService) {
-      this._AccService = Cc["@mozilla.org/accessibilityService;1"].getService(
-        Ci.nsIAccessibilityService
-      );
-    }
-
-    return this._AccService;
-  },
-
-  set MozBuildApp(value) {
-    this._buildApp = value;
-  },
-
-  get MozBuildApp() {
-    if (!this._buildApp) {
-      this._buildApp = this._buildAppMap[Services.appinfo.ID];
-    }
-    return this._buildApp;
-  },
-
-  get ScriptName() {
-    if (!this._ScriptName) {
-      this._ScriptName =
-        Services.appinfo.processType == 2 ? "AccessFuContent" : "AccessFu";
-    }
-    return this._ScriptName;
-  },
-
-  get AndroidSdkVersion() {
-    if (!this._AndroidSdkVersion) {
-      if (Services.appinfo.OS == "Android") {
-        this._AndroidSdkVersion = Services.sysinfo.getPropertyAsInt32(
-          "version"
-        );
-      } else {
-        // Most useful in desktop debugging.
-        this._AndroidSdkVersion = 16;
-      }
-    }
-    return this._AndroidSdkVersion;
-  },
-
-  set AndroidSdkVersion(value) {
-    // When we want to mimic another version.
-    this._AndroidSdkVersion = value;
-  },
-
-  getCurrentBrowser: function getCurrentBrowser(aWindow) {
-    return aWindow.document.querySelector(
-      "browser[type=content][primary=true]"
-    );
-  },
-
-  get isContentProcess() {
-    delete this.isContentProcess;
-    this.isContentProcess =
-      Services.appinfo.processType == Services.appinfo.PROCESS_TYPE_CONTENT;
-    return this.isContentProcess;
-  },
-
-  localize: function localize(aOutput) {
-    let outputArray = Array.isArray(aOutput) ? aOutput : [aOutput];
-    let localized = outputArray.map(details => this.stringBundle.get(details));
-    // Clean up the white space.
-    return localized
-      .filter(word => word)
-      .map(word => word.trim())
-      .filter(trimmed => trimmed);
-  },
-
-  get stringBundle() {
-    delete this.stringBundle;
-    let bundle = Services.strings.createBundle(
-      "chrome://global/locale/AccessFu.properties"
-    );
-    this.stringBundle = {
-      get: function stringBundle_get(aDetails = {}) {
-        if (!aDetails || typeof aDetails === "string") {
-          return aDetails;
-        }
-        let str = "";
-        let string = aDetails.string;
-        if (!string) {
-          return str;
-        }
-        try {
-          let args = aDetails.args;
-          let count = aDetails.count;
-          if (args) {
-            str = bundle.formatStringFromName(string, args);
-          } else {
-            str = bundle.GetStringFromName(string);
-          }
-          if (count) {
-            str = PluralForm.get(count, str);
-            str = str.replace("#1", count);
-          }
-        } catch (e) {
-          Logger.debug("Failed to get a string from a bundle for", string);
-        }
-        return str;
-      },
-    };
-    return this.stringBundle;
-  },
-
-  getCurrentMessageManager: function getCurrentMessageManager(aWindow) {
-    try {
-      return this.getCurrentBrowser(aWindow).frameLoader.messageManager;
-    } catch (x) {
-      return null;
-    }
-  },
-
-  getMessageManagerForFrame: function getMessageManagerForFrame(aFrame) {
-    try {
-      return aFrame.frameLoader.messageManager;
-    } catch (x) {
-      return null;
-    }
-  },
-
-  getState: function getState(aAccessibleOrEvent) {
-    if (aAccessibleOrEvent instanceof Ci.nsIAccessibleStateChangeEvent) {
-      return new State(
-        aAccessibleOrEvent.isExtraState ? 0 : aAccessibleOrEvent.state,
-        aAccessibleOrEvent.isExtraState ? aAccessibleOrEvent.state : 0
-      );
-    }
-    let state = {};
-    let extState = {};
-    aAccessibleOrEvent.getState(state, extState);
-    return new State(state.value, extState.value);
-  },
-
-  getAttributes: function getAttributes(aAccessible) {
-    let attributes = {};
-
-    if (aAccessible && aAccessible.attributes) {
-      // Populate |attributes| object with |aAccessible|'s attribute key-value
-      // pairs.
-      for (let attribute of aAccessible.attributes.enumerate()) {
-        attributes[attribute.key] = attribute.value;
-      }
-    }
-
-    return attributes;
-  },
-
-  getVirtualCursor: function getVirtualCursor(aDocument) {
-    let doc =
-      aDocument instanceof Ci.nsIAccessible
-        ? aDocument
-        : this.AccService.getAccessibleFor(aDocument);
-
-    return doc.QueryInterface(Ci.nsIAccessibleDocument).virtualCursor;
-  },
-
-  getContentResolution: function _getContentResolution(aAccessible) {
-    return aAccessible.document.window.windowUtils.getResolution();
-  },
-
-  getBounds: function getBounds(aAccessible) {
-    let objX = {},
-      objY = {},
-      objW = {},
-      objH = {};
-    aAccessible.getBounds(objX, objY, objW, objH);
-
-    return new Rect(objX.value, objY.value, objW.value, objH.value);
-  },
-
-  getTextSelection: function getTextSelection(aAccessible) {
-    const accText = aAccessible.QueryInterface(Ci.nsIAccessibleText);
-    const start = {},
-      end = {};
-    if (accText.selectionCount) {
-      accText.getSelectionBounds(0, start, end);
-    } else {
-      start.value = end.value = accText.caretOffset;
-    }
-
-    return [start.value, end.value];
-  },
-
-  getTextBounds: function getTextBounds(
-    aAccessible,
-    aStart,
-    aEnd,
-    aPreserveContentScale
-  ) {
-    let accText = aAccessible.QueryInterface(Ci.nsIAccessibleText);
-    let objX = {},
-      objY = {},
-      objW = {},
-      objH = {};
-    accText.getRangeExtents(
-      aStart,
-      aEnd,
-      objX,
-      objY,
-      objW,
-      objH,
-      Ci.nsIAccessibleCoordinateType.COORDTYPE_SCREEN_RELATIVE
-    );
-
-    return new Rect(objX.value, objY.value, objW.value, objH.value);
-  },
-
-  isInSubtree: function isInSubtree(aAccessible, aSubTreeRoot) {
-    let acc = aAccessible;
-
-    // If aSubTreeRoot is an accessible document, we will only walk up the
-    // ancestry of documents and skip everything else.
-    if (aSubTreeRoot instanceof Ci.nsIAccessibleDocument) {
-      while (acc) {
-        let parentDoc =
-          acc instanceof Ci.nsIAccessibleDocument
-            ? acc.parentDocument
-            : acc.document;
-        if (parentDoc === aSubTreeRoot) {
-          return true;
-        }
-        acc = parentDoc;
-      }
-      return false;
-    }
-
-    while (acc) {
-      if (acc == aSubTreeRoot) {
-        return true;
-      }
-
-      try {
-        acc = acc.parent;
-      } catch (x) {
-        Logger.debug("Failed to get parent:", x);
-        acc = null;
-      }
-    }
-
-    return false;
-  },
-
-  visibleChildCount: function visibleChildCount(aAccessible) {
-    let count = 0;
-    for (let child = aAccessible.firstChild; child; child = child.nextSibling) {
-      ++count;
-    }
-    return count;
-  },
-
-  isAliveAndVisible: function isAliveAndVisible(aAccessible, aIsOnScreen) {
-    if (!aAccessible) {
-      return false;
-    }
-
-    try {
-      let state = this.getState(aAccessible);
-      if (
-        state.contains(States.DEFUNCT) ||
-        state.contains(States.INVISIBLE) ||
-        (aIsOnScreen && state.contains(States.OFFSCREEN))
-      ) {
-        return false;
-      }
-    } catch (x) {
-      return false;
-    }
-
-    return true;
-  },
-
-  matchAttributeValue: function matchAttributeValue(aAttributeValue, values) {
-    let attrSet = new Set(aAttributeValue.split(" "));
-    for (let value of values) {
-      if (attrSet.has(value)) {
-        return value;
-      }
-    }
-    return undefined;
-  },
-
-  getLandmarkName: function getLandmarkName(aAccessible) {
-    return this.matchRoles(aAccessible, [
-      "banner",
-      "complementary",
-      "contentinfo",
-      "main",
-      "navigation",
-      "search",
-    ]);
-  },
-
-  getMathRole: function getMathRole(aAccessible) {
-    return this.matchRoles(aAccessible, [
-      "base",
-      "close-fence",
-      "denominator",
-      "numerator",
-      "open-fence",
-      "overscript",
-      "presubscript",
-      "presuperscript",
-      "root-index",
-      "subscript",
-      "superscript",
-      "underscript",
-    ]);
-  },
-
-  matchRoles: function matchRoles(aAccessible, aRoles) {
-    let roles = this.getAttributes(aAccessible)["xml-roles"];
-    if (!roles) {
-      return undefined;
-    }
-
-    // Looking up a role that would match any in the provided roles.
-    return this.matchAttributeValue(roles, aRoles);
-  },
-
-  getEmbeddedControl: function getEmbeddedControl(aLabel) {
-    if (aLabel) {
-      let relation = aLabel.getRelationByType(Relations.LABEL_FOR);
-      for (let i = 0; i < relation.targetsCount; i++) {
-        let target = relation.getTarget(i);
-        if (target.parent === aLabel) {
-          return target;
-        }
-      }
-    }
-
-    return null;
-  },
-
-  isListItemDecorator: function isListItemDecorator(
-    aStaticText,
-    aExcludeOrdered
-  ) {
-    let parent = aStaticText.parent;
-    if (aExcludeOrdered && parent.parent.DOMNode.nodeName === "OL") {
-      return false;
-    }
-
-    return (
-      parent.role === Roles.LISTITEM &&
-      parent.childCount > 1 &&
-      aStaticText.indexInParent === 0
-    );
-  },
-
-  getTextLeafForOffset: function getTextLeafForOffset(aAccessible, aOffset) {
-    let ht = aAccessible.QueryInterface(Ci.nsIAccessibleHyperText);
-    let offset = 0;
-    for (let child = aAccessible.firstChild; child; child = child.nextSibling) {
-      if (ht.getLinkIndexAtOffset(offset) != -1) {
-        // This is an embedded character, increment by one.
-        offset++;
-      } else {
-        offset += child.name.length;
-      }
-
-      if (offset >= aOffset) {
-        return child;
-      }
-    }
-
-    // This is probably a single child.
-    return aAccessible.lastChild;
-  },
-};
-
-/**
- * State object used internally to process accessible's states.
- * @param {Number} aBase     Base state.
- * @param {Number} aExtended Extended state.
- */
-function State(aBase, aExtended) {
-  this.base = aBase;
-  this.extended = aExtended;
-}
-
-State.prototype = {
-  contains: function State_contains(other) {
-    return !!(this.base & other.base || this.extended & other.extended);
-  },
-  toString: function State_toString() {
-    let stateStrings = Utils.AccService.getStringStates(
-      this.base,
-      this.extended
-    );
-    let statesArray = new Array(stateStrings.length);
-    for (let i = 0; i < statesArray.length; i++) {
-      statesArray[i] = stateStrings.item(i);
-    }
-    return "[" + statesArray.join(", ") + "]";
-  },
-};
-
-var Logger = {
-  // jshint ignore:line
-  GESTURE: -1,
-  DEBUG: 0,
-  INFO: 1,
-  WARNING: 2,
-  ERROR: 3,
-  _LEVEL_NAMES: ["GESTURE", "DEBUG", "INFO", "WARNING", "ERROR"],
-
-  logLevel: 1, // INFO;
-
-  // Note: used for testing purposes. If true, also log to the console service.
-  useConsoleService: false,
-
-  log: function log(aLogLevel) {
-    if (aLogLevel < this.logLevel) {
-      return;
-    }
-
-    let args = Array.prototype.slice.call(arguments, 1);
-    let message = (typeof args[0] === "function" ? args[0]() : args).join(" ");
-    message =
-      "[" +
-      Utils.ScriptName +
-      "] " +
-      this._LEVEL_NAMES[aLogLevel + 1] +
-      " " +
-      message +
-      "\n";
-    dump(message);
-    if (this.useConsoleService) {
-      try {
-        Services.console.logStringMessage(message);
-      } catch (ex) {
-        // There was an exception logging to the console service.
-      }
-    }
-  },
-
-  info: function info() {
-    this.log.apply(
-      this,
-      [this.INFO].concat(Array.prototype.slice.call(arguments))
-    );
-  },
-
-  gesture: function gesture() {
-    this.log.apply(
-      this,
-      [this.GESTURE].concat(Array.prototype.slice.call(arguments))
-    );
-  },
-
-  debug: function debug() {
-    this.log.apply(
-      this,
-      [this.DEBUG].concat(Array.prototype.slice.call(arguments))
-    );
-  },
-
-  warning: function warning() {
-    this.log.apply(
-      this,
-      [this.WARNING].concat(Array.prototype.slice.call(arguments))
-    );
-  },
-
-  error: function error() {
-    this.log.apply(
-      this,
-      [this.ERROR].concat(Array.prototype.slice.call(arguments))
-    );
-  },
-
-  logException: function logException(
-    aException,
-    aErrorMessage = "An exception has occured"
-  ) {
-    try {
-      let stackMessage = "";
-      if (aException.stack) {
-        stackMessage = "  " + aException.stack.replace(/\n/g, "\n  ");
-      } else if (aException.location) {
-        let frame = aException.location;
-        let stackLines = [];
-        while (frame && frame.lineNumber) {
-          stackLines.push(
-            "  " + frame.name + "@" + frame.filename + ":" + frame.lineNumber
-          );
-          frame = frame.caller;
-        }
-        stackMessage = stackLines.join("\n");
-      } else {
-        stackMessage =
-          "(" + aException.fileName + ":" + aException.lineNumber + ")";
-      }
-      this.error(
-        aErrorMessage + ":\n " + aException.message + "\n" + stackMessage
-      );
-    } catch (x) {
-      this.error(x);
-    }
-  },
-
-  accessibleToString: function accessibleToString(aAccessible) {
-    if (!aAccessible) {
-      return "[ null ]";
-    }
-
-    try {
-      return (
-        "[ " +
-        Utils.AccService.getStringRole(aAccessible.role) +
-        " | " +
-        aAccessible.name +
-        " ]"
-      );
-    } catch (x) {
-      return "[ defunct ]";
-    }
-  },
-
-  eventToString: function eventToString(aEvent) {
-    let str = Utils.AccService.getStringEventType(aEvent.eventType);
-    if (aEvent.eventType == Events.STATE_CHANGE) {
-      let event = aEvent.QueryInterface(Ci.nsIAccessibleStateChangeEvent);
-      let stateStrings = event.isExtraState
-        ? Utils.AccService.getStringStates(0, event.state)
-        : Utils.AccService.getStringStates(event.state, 0);
-      str += " (" + stateStrings.item(0) + ")";
-    }
-
-    if (aEvent.eventType == Events.VIRTUALCURSOR_CHANGED) {
-      let event = aEvent.QueryInterface(
-        Ci.nsIAccessibleVirtualCursorChangeEvent
-      );
-      let pivot = aEvent.accessible.QueryInterface(Ci.nsIAccessibleDocument)
-        .virtualCursor;
-      str +=
-        " (" +
-        this.accessibleToString(event.oldAccessible) +
-        " -> " +
-        this.accessibleToString(pivot.position) +
-        ")";
-    }
-
-    return str;
-  },
-
-  statesToString: function statesToString(aAccessible) {
-    return Utils.getState(aAccessible).toString();
-  },
-
-  dumpTree: function dumpTree(aLogLevel, aRootAccessible) {
-    if (aLogLevel < this.logLevel) {
-      return;
-    }
-
-    this._dumpTreeInternal(aLogLevel, aRootAccessible, 0);
-  },
-
-  _dumpTreeInternal: function _dumpTreeInternal(
-    aLogLevel,
-    aAccessible,
-    aIndent
-  ) {
-    let indentStr = "";
-    for (let i = 0; i < aIndent; i++) {
-      indentStr += " ";
-    }
-    this.log(
-      aLogLevel,
-      indentStr,
-      this.accessibleToString(aAccessible),
-      "(" + this.statesToString(aAccessible) + ")"
-    );
-    for (let i = 0; i < aAccessible.childCount; i++) {
-      this._dumpTreeInternal(aLogLevel, aAccessible.getChildAt(i), aIndent + 1);
-    }
-  },
-};
-
-/**
- * PivotContext: An object that generates and caches context information
- * for a given accessible and its relationship with another accessible.
- *
- * If the given accessible is a label for a nested control, then this
- * context will represent the nested control instead of the label.
- * With the exception of bounds calculation, which will use the containing
- * label. In this case the |accessible| field would be the embedded control,
- * and the |accessibleForBounds| field would be the label.
- */
-function PivotContext(
-  aAccessible,
-  aOldAccessible, // jshint ignore:line
-  aStartOffset,
-  aEndOffset,
-  aIgnoreAncestry = false,
-  aIncludeInvisible = false
-) {
-  this._accessible = aAccessible;
-  this._nestedControl = Utils.getEmbeddedControl(aAccessible);
-  this._oldAccessible = this._isDefunct(aOldAccessible) ? null : aOldAccessible;
-  this.startOffset = aStartOffset;
-  this.endOffset = aEndOffset;
-  this._ignoreAncestry = aIgnoreAncestry;
-  this._includeInvisible = aIncludeInvisible;
-}
-
-PivotContext.prototype = {
-  get accessible() {
-    // If the current pivot accessible has a nested control,
-    // make this context use it publicly.
-    return this._nestedControl || this._accessible;
-  },
-
-  get oldAccessible() {
-    return this._oldAccessible;
-  },
-
-  get isNestedControl() {
-    return !!this._nestedControl;
-  },
-
-  get accessibleForBounds() {
-    return this._accessible;
-  },
-
-  get textAndAdjustedOffsets() {
-    if (this.startOffset === -1 && this.endOffset === -1) {
-      return null;
-    }
-
-    if (!this._textAndAdjustedOffsets) {
-      let result = {
-        startOffset: this.startOffset,
-        endOffset: this.endOffset,
-        text: this._accessible
-          .QueryInterface(Ci.nsIAccessibleText)
-          .getText(0, Ci.nsIAccessibleText.TEXT_OFFSET_END_OF_TEXT),
-      };
-      let hypertextAcc = this._accessible.QueryInterface(
-        Ci.nsIAccessibleHyperText
-      );
-
-      // Iterate through the links in backwards order so text replacements don't
-      // affect the offsets of links yet to be processed.
-      for (let i = hypertextAcc.linkCount - 1; i >= 0; i--) {
-        let link = hypertextAcc.getLinkAt(i);
-        let linkText = "";
-        if (link instanceof Ci.nsIAccessibleText) {
-          linkText = link
-            .QueryInterface(Ci.nsIAccessibleText)
-            .getText(0, Ci.nsIAccessibleText.TEXT_OFFSET_END_OF_TEXT);
-        }
-
-        let start = link.startIndex;
-        let end = link.endIndex;
-        for (let offset of ["startOffset", "endOffset"]) {
-          if (this[offset] >= end) {
-            result[offset] += linkText.length - (end - start);
-          }
-        }
-        result.text =
-          result.text.substring(0, start) +
-          linkText +
-          result.text.substring(end);
-      }
-
-      this._textAndAdjustedOffsets = result;
-    }
-
-    return this._textAndAdjustedOffsets;
-  },
-
-  /**
-   * Get a list of |aAccessible|'s ancestry up to the root.
-   * @param  {nsIAccessible} aAccessible.
-   * @return {Array} Ancestry list.
-   */
-  _getAncestry: function _getAncestry(aAccessible) {
-    let ancestry = [];
-    let parent = aAccessible;
-    try {
-      while (parent && (parent = parent.parent)) {
-        ancestry.push(parent);
-      }
-    } catch (x) {
-      // A defunct accessible will raise an exception geting parent.
-      Logger.debug("Failed to get parent:", x);
-    }
-    return ancestry.reverse();
-  },
-
-  /**
-   * A list of the old accessible's ancestry.
-   */
-  get oldAncestry() {
-    if (!this._oldAncestry) {
-      if (!this._oldAccessible || this._ignoreAncestry) {
-        this._oldAncestry = [];
-      } else {
-        this._oldAncestry = this._getAncestry(this._oldAccessible);
-        this._oldAncestry.push(this._oldAccessible);
-      }
-    }
-    return this._oldAncestry;
-  },
-
-  /**
-   * A list of the current accessible's ancestry.
-   */
-  get currentAncestry() {
-    if (!this._currentAncestry) {
-      this._currentAncestry = this._ignoreAncestry
-        ? []
-        : this._getAncestry(this.accessible);
-    }
-    return this._currentAncestry;
-  },
-
-  /*
-   * This is a list of the accessible's ancestry up to the common ancestor
-   * of the accessible and the old accessible. It is useful for giving the
-   * user context as to where they are in the heirarchy.
-   */
-  get newAncestry() {
-    if (!this._newAncestry) {
-      this._newAncestry = this._ignoreAncestry
-        ? []
-        : this.currentAncestry.filter(
-            (currentAncestor, i) => currentAncestor !== this.oldAncestry[i]
-          );
-    }
-    return this._newAncestry;
-  },
-
-  /*
-   * Traverse the accessible's subtree in pre or post order.
-   * It only includes the accessible's visible chidren.
-   * Note: needSubtree is a function argument that can be used to determine
-   * whether aAccessible's subtree is required.
-   */
-  _traverse: function* _traverse(aAccessible, aPreorder, aStop) {
-    if (aStop && aStop(aAccessible)) {
-      return;
-    }
-    let child = aAccessible.firstChild;
-    while (child) {
-      let include = true;
-      if (include) {
-        if (aPreorder) {
-          yield child;
-          for (let node of this._traverse(child, aPreorder, aStop)) {
-            yield node;
-          }
-        } else {
-          for (let node of this._traverse(child, aPreorder, aStop)) {
-            yield node;
-          }
-          yield child;
-        }
-      }
-      child = child.nextSibling;
-    }
-  },
-
-  /**
-   * Get interaction hints for the context ancestry.
-   * @return {Array} Array of interaction hints.
-   */
-  get interactionHints() {
-    let hints = [];
-    this.newAncestry
-      .concat(this.accessible)
-      .reverse()
-      .forEach(aAccessible => {
-        let hint = Utils.getAttributes(aAccessible)["moz-hint"];
-        if (hint) {
-          hints.push(hint);
-        } else if (aAccessible.actionCount > 0) {
-          hints.push({
-            string:
-              Utils.AccService.getStringRole(aAccessible.role).replace(
-                /\s/g,
-                ""
-              ) + "-hint",
-          });
-        }
-      });
-    return hints;
-  },
-
-  /*
-   * A subtree generator function, used to generate a flattened
-   * list of the accessible's subtree in pre or post order.
-   * It only includes the accessible's visible chidren.
-   * @param {boolean} aPreorder A flag for traversal order. If true, traverse
-   * in preorder; if false, traverse in postorder.
-   * @param {function} aStop An optional function, indicating whether subtree
-   * traversal should stop.
-   */
-  subtreeGenerator: function subtreeGenerator(aPreorder, aStop) {
-    return this._traverse(this.accessible, aPreorder, aStop);
-  },
-
-  getCellInfo: function getCellInfo(aAccessible) {
-    if (!this._cells) {
-      this._cells = new WeakMap();
-    }
-
-    let domNode = aAccessible.DOMNode;
-    if (this._cells.has(domNode)) {
-      return this._cells.get(domNode);
-    }
-
-    let cellInfo = {};
-    let getAccessibleCell = function getAccessibleCell(aAccessible) {
-      if (!aAccessible) {
-        return null;
-      }
-      if (
-        ![
-          Roles.CELL,
-          Roles.COLUMNHEADER,
-          Roles.ROWHEADER,
-          Roles.MATHML_CELL,
-        ].includes(aAccessible.role)
-      ) {
-        return null;
-      }
-      try {
-        return aAccessible.QueryInterface(Ci.nsIAccessibleTableCell);
-      } catch (x) {
-        Logger.logException(x);
-        return null;
-      }
-    };
-    let getHeaders = function* getHeaders(aHeaderCells) {
-      for (let { name } of aHeaderCells.enumerate(Ci.nsIAccessible)) {
-        yield name;
-      }
-    };
-
-    cellInfo.current = getAccessibleCell(aAccessible);
-
-    if (!cellInfo.current) {
-      Logger.warning(
-        aAccessible,
-        "does not support nsIAccessibleTableCell interface."
-      );
-      this._cells.set(domNode, null);
-      return null;
-    }
-
-    let table = cellInfo.current.table;
-    if (table.isProbablyForLayout()) {
-      this._cells.set(domNode, null);
-      return null;
-    }
-
-    cellInfo.previous = null;
-    let oldAncestry = this.oldAncestry.reverse();
-    let ancestor = oldAncestry.shift();
-    while (!cellInfo.previous && ancestor) {
-      let cell = getAccessibleCell(ancestor);
-      if (cell && cell.table === table) {
-        cellInfo.previous = cell;
-      }
-      ancestor = oldAncestry.shift();
-    }
-
-    if (cellInfo.previous) {
-      cellInfo.rowChanged =
-        cellInfo.current.rowIndex !== cellInfo.previous.rowIndex;
-      cellInfo.columnChanged =
-        cellInfo.current.columnIndex !== cellInfo.previous.columnIndex;
-    } else {
-      cellInfo.rowChanged = true;
-      cellInfo.columnChanged = true;
-    }
-
-    cellInfo.rowExtent = cellInfo.current.rowExtent;
-    cellInfo.columnExtent = cellInfo.current.columnExtent;
-    cellInfo.columnIndex = cellInfo.current.columnIndex;
-    cellInfo.rowIndex = cellInfo.current.rowIndex;
-
-    cellInfo.columnHeaders = [];
-    if (
-      cellInfo.columnChanged &&
-      cellInfo.current.role !== Roles.COLUMNHEADER
-    ) {
-      cellInfo.columnHeaders = [
-        ...getHeaders(cellInfo.current.columnHeaderCells),
-      ];
-    }
-    cellInfo.rowHeaders = [];
-    if (
-      cellInfo.rowChanged &&
-      (cellInfo.current.role === Roles.CELL ||
-        cellInfo.current.role === Roles.MATHML_CELL)
-    ) {
-      cellInfo.rowHeaders = [...getHeaders(cellInfo.current.rowHeaderCells)];
-    }
-
-    this._cells.set(domNode, cellInfo);
-    return cellInfo;
-  },
-
-  get bounds() {
-    if (!this._bounds) {
-      this._bounds = Utils.getBounds(this.accessibleForBounds);
-    }
-
-    return this._bounds.clone();
-  },
-
-  _isDefunct: function _isDefunct(aAccessible) {
-    try {
-      return Utils.getState(aAccessible).contains(States.DEFUNCT);
-    } catch (x) {
-      return true;
-    }
-  },
-};
-
-function PrefCache(aName, aCallback, aRunCallbackNow) {
-  // jshint ignore:line
-  this.name = aName;
-  this.callback = aCallback;
-
-  let branch = Services.prefs;
-  this.value = this._getValue(branch);
-
-  if (this.callback && aRunCallbackNow) {
-    try {
-      this.callback(this.name, this.value, true);
-    } catch (x) {
-      Logger.logException(x);
-    }
-  }
-
-  branch.addObserver(aName, this, true);
-}
-
-PrefCache.prototype = {
-  _getValue: function _getValue(aBranch) {
-    try {
-      if (!this.type) {
-        this.type = aBranch.getPrefType(this.name);
-      }
-      switch (this.type) {
-        case Ci.nsIPrefBranch.PREF_STRING:
-          return aBranch.getCharPref(this.name);
-        case Ci.nsIPrefBranch.PREF_INT:
-          return aBranch.getIntPref(this.name);
-        case Ci.nsIPrefBranch.PREF_BOOL:
-          return aBranch.getBoolPref(this.name);
-        default:
-          return null;
-      }
-    } catch (x) {
-      // Pref does not exist.
-      return null;
-    }
-  },
-
-  observe: function observe(aSubject) {
-    this.value = this._getValue(aSubject.QueryInterface(Ci.nsIPrefBranch));
-    Logger.info("pref changed", this.name, this.value);
-    if (this.callback) {
-      try {
-        this.callback(this.name, this.value, false);
-      } catch (x) {
-        Logger.logException(x);
-      }
-    }
-  },
-
-  QueryInterface: ChromeUtils.generateQI([
-    Ci.nsIObserver,
-    Ci.nsISupportsWeakReference,
-  ]),
-};
deleted file mode 100644
--- a/accessible/jsat/content-script.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-/* eslint-env mozilla/frame-script */
-
-ChromeUtils.defineModuleGetter(
-  this,
-  "Logger",
-  "resource://gre/modules/accessibility/Utils.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "Utils",
-  "resource://gre/modules/accessibility/Utils.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "EventManager",
-  "resource://gre/modules/accessibility/EventManager.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "ContentControl",
-  "resource://gre/modules/accessibility/ContentControl.jsm"
-);
-ChromeUtils.defineModuleGetter(
-  this,
-  "States",
-  "resource://gre/modules/accessibility/Constants.jsm"
-);
-
-Logger.info("content-script.js", content.document.location);
-
-function onStop(m) {
-  Logger.debug("AccessFu:Stop");
-
-  removeMessageListener("AccessFu:Stop", onStop);
-
-  this._jsat_eventManager.stop();
-  this._jsat_contentControl.stop();
-}
-
-addMessageListener("AccessFu:Stop", onStop);
-
-if (!this._jsat_contentControl) {
-  this._jsat_contentControl = new ContentControl(this);
-}
-this._jsat_contentControl.start();
-
-if (!this._jsat_eventManager) {
-  this._jsat_eventManager = new EventManager(this);
-}
-this._jsat_eventManager.start();
-
-function contentStarted() {
-  let accDoc = Utils.AccService.getAccessibleFor(content.document);
-  if (accDoc && !Utils.getState(accDoc).contains(States.BUSY)) {
-    sendAsyncMessage("AccessFu:ContentStarted");
-  } else {
-    content.setTimeout(contentStarted, 0);
-  }
-}
-
-if (Utils.inTest) {
-  // During a test we want to wait for the document to finish loading for
-  // consistency.
-  contentStarted();
-}
deleted file mode 100644
--- a/accessible/jsat/jar.mn
+++ /dev/null
@@ -1,6 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-toolkit.jar:
-    content/global/accessibility/content-script.js (content-script.js)
deleted file mode 100644
--- a/accessible/jsat/moz.build
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-EXTRA_JS_MODULES.accessibility += [
-    'AccessFu.jsm',
-    'Constants.jsm',
-    'ContentControl.jsm',
-    'EventManager.jsm',
-    'Traversal.jsm',
-    'Utils.jsm'
-]
-
-JAR_MANIFESTS += ['jar.mn']
--- a/accessible/moz.build
+++ b/accessible/moz.build
@@ -18,17 +18,16 @@ else:
     DIRS += ['other']
 
 DIRS += [ 'aom',
           'base',
           'generic',
           'html',
           'interfaces',
           'ipc',
-          'jsat',
           'xpcom'
 ]
 
 if CONFIG['MOZ_XUL']:
     DIRS += ['xul']
 
 TEST_DIRS += ['tests/mochitest']
 
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/a11y.ini
+++ /dev/null
@@ -1,37 +0,0 @@
-[DEFAULT]
-support-files =
-  jsatcommon.js
-  output.js
-  doc_traversal.html
-  doc_content_integration.html
-  doc_content_text.html
-  !/accessible/tests/mochitest/*.js
-  !/accessible/tests/mochitest/moz.png
-
-[test_alive.html]
-[test_content_integration.html]
-skip-if = true
-[test_explicit_names.html]
-skip-if = true
-[test_hints.html]
-skip-if = true
-[test_landmarks.html]
-skip-if = true
-[test_live_regions.html]
-skip-if = true
-[test_output_mathml.html]
-skip-if = true
-[test_output.html]
-skip-if = true
-[test_tables.html]
-skip-if = true
-[test_text_editable_navigation.html]
-skip-if = true
-[test_text_editing.html]
-skip-if = true
-[test_text_navigation_focus.html]
-skip-if = true
-[test_text_navigation.html]
-skip-if = true
-[test_traversal.html]
-[test_traversal_helper.html]
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/doc_content_integration.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <title>Traversal Rule test document</title>
-  <meta charset="utf-8" />
-  <script>
-    var frameContents = "<html>" +
-      "<head><title>such app</title></head>" +
-      "<body>" +
-      "<h1>wow</h1>" +
-      "<ul>" +
-      '<li><label><input type="checkbox">many option</label></li>' +
-      "</ul>" +
-      '<label for="r">much range</label>' +
-      '<input min="0" max="10" value="5" type="range" id="r">' +
-      "</body>" +
-      "</html>";
-
-    function hideAlert() {
-      document.getElementById("alert").hidden = true;
-    }
-
-    function toggleLight() {
-      var lightSwitch = document.getElementById("light");
-      lightSwitch.setAttribute("aria-checked",
-        lightSwitch.getAttribute("aria-checked") === "true" ? "false" : "true");
-    }
-
-  </script>
-  <style>
-    #windows {
-      position: relative;
-      width: 320px;
-      height: 480px;
-    }
-
-    #windows > iframe {
-      z-index: 1;
-    }
-
-    #windows > div[role='dialog'] {
-      z-index: 2;
-      background-color: pink;
-    }
-
-    #windows > * {
-      position: absolute;
-      width: 100%;
-      height: 100%;
-    }
-
-    iframe {
-      width: 100%;
-      height: 100%;
-    }
-
-  </style>
-
-</head>
-<body>
-  <div>Phone status bar</div>
-  <div id="windows">
-    <button id="back">Back</button>
-    <div role="dialog" id="alert" hidden>
-      <h1>This is an alert!</h1>
-      <p>Do you agree?</p>
-      <button onclick="setTimeout(hideAlert, 500)">Yes</button>
-      <button onclick="hideAlert()">No</button>
-    </div>
-    <div id="appframe"></div>
-  </div>
-  <button id="home">Home</button>
-  <button id="fruit" aria-label="apple"></button>
-  <span id="light" role="switch" aria-label="Light" aria-checked="false" onclick="toggleLight()"></span>
-  <div id="live" aria-live="polite" aria-label="live">
-    <div id="slider" role="slider" aria-label="slider" aria-valuemin="0"
-      aria-valuemax="10"  aria-valuenow="0"></div>
-  </div>
-</body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/doc_content_text.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Text content test document</title>
-    <meta charset="utf-8" />
-  </head>
-  <body>
-  <p>These are my awards, Mother. From Army.
-    The seal is for marksmanship, and the gorilla is for sand racing.</p>
-  <p>You're a good guy, mon frere. That means brother in French.
-    I don't know how I know that. I took four years of Spanish.</p>
-  <textarea>Please refrain from Mayoneggs during this salmonella scare.</textarea>
-  <label>So we don't get dessert?</label><input type="text">
-  </body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/doc_traversal.html
+++ /dev/null
@@ -1,164 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <title>Traversal Rule test document</title>
-  <meta charset="utf-8" />
-  <style>
-    .content:before {
-      content: "Content";
-    }
-  </style>
-</head>
-<body>
-  <header id="header-1">
-    <h3 id="heading-1">A small first heading</h3>
-    <form>
-      <label for="input-1-1">Name:</label>
-      <input id="input-1-1">
-      <label id="label-1-2">Favourite Ice Cream Flavour:<input id="input-1-2"></label>
-      <button id="button-1-1">Magic Button</button>
-      <label for="radio-1-1">Radios are old: </label>
-      <input id="radio-1-1" type="radio">
-      <label for="radio-1-2">Radios are new: </label>
-      <input id="radio-1-2" type="radio">
-      <label for="input-1-3">Password:</label>
-      <input id="input-1-3" type="password">
-      <label for="input-1-4">Unlucky number:</label>
-      <input id="input-1-4" type="tel">
-      <input id="button-1-2" type="button" value="Fun">
-      <label for="checkbox-1-1">Check me: </label>
-      <input id="checkbox-1-1" type="checkbox">
-      <select id="select-1-1">
-        <option>Value 1</option>
-        <option>Value 2</option>
-        <option>Value 3</option>
-      </select>
-      <select id="select-1-2" multiple="true">
-        <option>Value 1</option>
-        <option>Value 2</option>
-        <option>Value 3</option>
-      </select>
-      <label for="checkbox-1-2">Check me too: </label>
-      <input id="checkbox-1-2" type="checkbox">
-      <label for="checkbox-1-3">But not me: </label>
-      <input id="checkbox-1-3" type="checkbox" aria-hidden="true">
-      <label for="checkbox-1-4">Or me! </label>
-      <input id="checkbox-1-4" type="checkbox" style="visibility:hidden">
-      <select id="select-1-3" size="3">
-        <option>Value 1</option>
-        <option>Value 2</option>
-        <option>Value 3</option>
-      </select>
-      <label for="input-1-5">Electronic mailing address:</label>
-      <input id="input-1-5" type="email">
-      <input id="button-1-3" type="submit" value="Submit">
-    </form>
-  </header>
-  <main id="main-1">
-    <h2 id="heading-2">A larger second</h2>
-    <div id="heading-3" role="heading">ARIA is fun</div>
-    <input id="button-2-1" type="button" value="More Fun">
-    <div id="button-2-2" tabindex="0" role="button">ARIA fun</div>
-    <div id="button-2-3" tabindex="0" role="button" aria-pressed="false">My little togglebutton</div>
-    <div id="button-2-4" tabindex="0" role="spinbutton">ARIA fun</div>
-  </main>
-  <h1 id="heading-4" style="display:none">Invisible header</h1>
-  <dl id="list-1">
-    <dt id="listitem-1-1">Programming Language</dt>
-    <dd>A esoteric weapon wielded by only the most formidable warriors,
-    for its unrelenting strict power is unfathomable.</dd>
-  </dl>
-  <ul id="list-2" onclick="alert('hi');">
-    <li id="listitem-2-1">Lists of Programming Languages</li>
-    <li id="listitem-2-2">Lisp
-      <ol id="list-3">
-        <li id="listitem-3-1">Scheme</li>
-        <li id="listitem-3-2">Racket</li>
-        <li id="listitem-3-3">Clojure</li>
-        <li id="listitem-3-4"><strong>Standard</strong> Lisp</li>
-        <li id="listitem-3-5"><a id="link-0" href="#">Common</a> Lisp</li>
-        <li id="listitem-3-6"><input id="checkbox-1-5" type="checkbox"> LeLisp</li>
-      </ol>
-    </li>
-    <li id="listitem-2-3">JavaScript</li>
-  </ul>
-  <section>
-    <h6 id="heading-5">The last (visible) one!</h6>
-    <img id="image-1" src="http://example.com" alt="">
-    <img id="image-2" src="../moz.png" alt="stuff">
-    <div id="image-3" tabindex="0" role="img">Not actually an image</div>
-  </section>
-  <section aria-label="Some region">
-    <h4 id="heading-6" aria-hidden="true">Hidden header</h4>
-    <a id="link-1" href="http://www.mozilla.org">Link</a>
-    <a id="anchor-1">Words</a>
-    <a id="link-2" href="http://www.mozilla.org">Link the second</a>
-    <a id="anchor-2">Sentences</a>
-    <a id="link-3" href="http://www.example.com">Link the third</a>
-  </section>
-  <hr id="separator-1">
-  <h6 id="heading-6"></h6>
-  <table id="table-1">
-  <tr>
-    <td>3</td>
-    <td>1</td>
-  </tr>
-  <tr>
-    <td>4</td>
-    <td>1</td>
-  </tr>
-  </table>
-  <section id="grid" role="grid">
-    <ol role="row">
-      <li role="presentation"></li>
-      <li role="columnheader" aria-label="Sunday">S</li>
-      <li role="columnheader">M</li>
-    </ol>
-    <ol role="row">
-      <li role="rowheader" aria-label="Week 1">1</li>
-      <li role="gridcell"><span>3</span><div></div></li>
-      <li role="gridcell"><span>4</span><div>7</div></li>
-    </ol>
-    <ol role="row">
-      <li role="rowheader">2</li>
-      <li role="gridcell"><span>5</span><div role="presentation">8</div></li>
-      <li id="gridcell4" role="gridcell">
-        <span>6</span><div aria-hidden="true"><div class="content"></div></div>
-      </li>
-    </ol>
-  </section>
-  <div id="separator-2" role="separator">Just an innocuous separator</div>
-  <table id="table-2">
-    <thead>
-      <tr>
-        <th>Dirty Words</th>
-        <th>Meaning</th>
-      </tr>
-    </thead>
-    <tfoot>
-      <tr>
-        <td>Mud</td>
-        <td>Wet Dirt</td>
-      </tr>
-    </tfoot>
-    <tbody>
-      <tr>
-        <td>Dirt</td>
-        <td>Messy Stuff</td>
-      </tr>
-    </tbody>
-  </table>
-  <footer id="footer-1">
-    <div id="statusbar-1" role="status">Last sync:<span>2 days ago</span></div>
-    <div aria-label="Last sync: 30min ago" id="statusbar-2" role="status"></div>
-  </footer>
-
-  <span id="switch-1" role="switch" aria-checked="false" aria-label="Light switch"></span>
-  <p>This is a MathML formula <math id="math-1" display="block">
-    <mfrac>
-      <mrow><mi>x</mi><mo>+</mo><mn>1</mn></mrow>
-      <msqrt><mn>3</mn><mo>/</mo><mn>4</mn></msqrt>
-    </mfrac>
-  </math> with some text after.</p>
-</body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/jsatcommon.js
+++ /dev/null
@@ -1,444 +0,0 @@
-// A common module to run tests on the AccessFu module
-
-"use strict";
-
-/* global isDeeply, getMainChromeWindow, SimpleTest, SpecialPowers,
-  addMessageListener, currentTabDocument, currentBrowser*/
-
-/**
- * A global variable holding an array of test functions.
- */
-var gTestFuncs = [];
-/**
- * A global Iterator for the array of test functions.
- */
-var gIterator;
-
-var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
-var AccessFu;
-const { Logger, Utils } = ChromeUtils.import(
-  "resource://gre/modules/accessibility/Utils.jsm"
-);
-
-const MovementGranularity = {
-  CHARACTER: 1,
-  WORD: 2,
-  LINE: 4,
-  PARAGRAPH: 8,
-};
-
-var AccessFuTest = {
-  addFunc: function AccessFuTest_addFunc(aFunc) {
-    if (aFunc) {
-      gTestFuncs.push(aFunc);
-    }
-  },
-
-  _registerListener: function AccessFuTest__registerListener(
-    aWaitForMessage,
-    aListenerFunc
-  ) {
-    var listener = {
-      observe: function observe(aMessage) {
-        // Ignore unexpected messages.
-        if (!(aMessage instanceof Ci.nsIConsoleMessage)) {
-          return;
-        }
-        if (!aMessage.message.includes(aWaitForMessage)) {
-          return;
-        }
-        aListenerFunc.apply(listener);
-      },
-    };
-    Services.console.registerListener(listener);
-    return listener;
-  },
-
-  on_log: function AccessFuTest_on_log(aWaitForMessage, aListenerFunc) {
-    return this._registerListener(aWaitForMessage, aListenerFunc);
-  },
-
-  off_log: function AccessFuTest_off_log(aListener) {
-    Services.console.unregisterListener(aListener);
-  },
-
-  once_log: function AccessFuTest_once_log(aWaitForMessage, aListenerFunc) {
-    return this._registerListener(
-      aWaitForMessage,
-      function listenAndUnregister() {
-        Services.console.unregisterListener(this);
-        aListenerFunc();
-      }
-    );
-  },
-
-  _addObserver: function AccessFuTest__addObserver(aWaitForData, aListener) {
-    var listener = function listener(aSubject, aTopic, aData) {
-      var data = JSON.parse(aData);
-      // Ignore non-relevant outputs.
-      if (!data || (data[0] && data[0].text && data[0].text[0] == "new tab")) {
-        return;
-      }
-
-      isDeeply(data, aWaitForData, "Data is correct (" + aData + ")");
-      aListener.apply(listener);
-    };
-    Services.obs.addObserver(listener, "accessibility-output");
-    return listener;
-  },
-
-  on: function AccessFuTest_on(aWaitForData, aListener) {
-    return this._addObserver(aWaitForData, aListener);
-  },
-
-  off: function AccessFuTest_off(aListener) {
-    Services.obs.removeObserver(aListener, "accessibility-output");
-  },
-
-  once: function AccessFuTest_once(aWaitForData, aListener) {
-    return this._addObserver(aWaitForData, function observerAndRemove() {
-      Services.obs.removeObserver(this, "accessibility-output");
-      aListener();
-    });
-  },
-
-  _waitForExplicitFinish: false,
-
-  waitForExplicitFinish: function AccessFuTest_waitForExplicitFinish() {
-    this._waitForExplicitFinish = true;
-  },
-
-  finish: function AccessFuTest_finish() {
-    // Disable the console service logging.
-    Logger.useConsoleService = false;
-    Logger.logLevel = Logger.INFO;
-    // Finish through idle callback to let AccessFu._disable complete.
-    SimpleTest.executeSoon(function() {
-      // May be redundant, but for cleanup's sake.
-      AccessFu.disable();
-      SimpleTest.finish();
-    });
-  },
-
-  nextTest: function AccessFuTest_nextTest() {
-    SimpleTest.executeSoon(() => {
-      var result = gIterator.next();
-      if (result.done) {
-        this.finish();
-        return;
-      }
-      var testFunc = result.value;
-      testFunc();
-    });
-  },
-
-  runTests: function AccessFuTest_runTests(aAdditionalPrefs) {
-    if (gTestFuncs.length === 0) {
-      ok(false, "No tests specified!");
-      SimpleTest.finish();
-      return;
-    }
-
-    // Create an Iterator for gTestFuncs array.
-    gIterator = (function*() {
-      for (var testFunc of gTestFuncs) {
-        yield testFunc;
-      }
-    })();
-
-    Logger.useConsoleService = true;
-    Logger.logLevel = Logger.DEBUG;
-
-    // Start AccessFu and put it in stand-by.
-    ({ AccessFu } = ChromeUtils.import(
-      "resource://gre/modules/accessibility/AccessFu.jsm"
-    ));
-
-    var prefs = [["accessibility.accessfu.notify_output", 1]];
-    prefs.push.apply(prefs, aAdditionalPrefs);
-
-    SpecialPowers.pushPrefEnv({ set: prefs }, function() {
-      if (AccessFuTest._waitForExplicitFinish) {
-        // Run all test functions asynchronously.
-        AccessFuTest.nextTest();
-      } else {
-        // Run all test functions synchronously.
-        gTestFuncs.forEach(testFunc => testFunc());
-        AccessFuTest.finish();
-      }
-    });
-  },
-};
-
-class AccessFuContentTestRunner {
-  constructor() {
-    this.listenersMap = new Map();
-    let frames = Array.from(currentTabDocument().querySelectorAll("iframe"));
-    this.mms = [
-      Utils.getMessageManager(currentBrowser()),
-      ...frames.map(f => Utils.getMessageManager(f)).filter(mm => !!mm),
-    ];
-  }
-
-  start(aFinishedCallback) {
-    Logger.logLevel = Logger.DEBUG;
-    this.finishedCallback = aFinishedCallback;
-
-    return Promise.all(this.mms.map(mm => this.setupMessageManager(mm)));
-  }
-
-  finish() {
-    Logger.logLevel = Logger.INFO;
-    this.listenersMap.clear();
-    for (var mm of this.mms) {
-      mm.sendAsyncMessage("AccessFu:Stop");
-      mm.removeMessageListener("AccessFu:Present", this);
-    }
-  }
-
-  sendMessage(message) {
-    // First message manager is the top-level one.
-    this.mms[0].sendAsyncMessage(message.name, message.data);
-  }
-
-  androidEvent(eventType) {
-    return new Promise(resolve => {
-      if (!this.listenersMap.has(eventType)) {
-        this.listenersMap.set(eventType, [resolve]);
-      } else {
-        this.listenersMap.get(eventType).push(resolve);
-      }
-    }).then(evt => {
-      if (this.debug) {
-        info("Resolving event: " + evt.eventType);
-      }
-      return evt;
-    });
-  }
-
-  isFocused(aExpected) {
-    var doc = currentTabDocument();
-    SimpleTest.is(
-      doc.activeElement,
-      doc.querySelector(aExpected),
-      "Correct element is focused: " + aExpected
-    );
-  }
-
-  async setupMessageManager(aMessageManager) {
-    function contentScript() {
-      // eslint-disable-next-line no-shadow
-      const { Logger, Utils } = ChromeUtils.import(
-        "resource://gre/modules/accessibility/Utils.jsm"
-      );
-      Logger.logLevel = "DEBUG";
-      Utils.inTest = true;
-
-      addMessageListener("AccessFuTest:Focus", aMessage => {
-        var elem = content.document.querySelector(aMessage.data.selector);
-        if (elem) {
-          elem.focus();
-        }
-      });
-
-      addMessageListener("AccessFuTest:Blur", () => {
-        content.document.activeElement.blur();
-      });
-    }
-
-    aMessageManager.loadFrameScript(
-      "data:,(" + contentScript.toString() + ")();",
-      false
-    );
-
-    aMessageManager.loadFrameScript(
-      "chrome://global/content/accessibility/content-script.js",
-      false
-    );
-
-    let startedPromise = new Promise(resolve =>
-      aMessageManager.addMessageListener("AccessFu:ContentStarted", resolve)
-    );
-
-    await startedPromise;
-
-    aMessageManager.addMessageListener("AccessFu:Present", this);
-  }
-
-  receiveMessage(aMessage) {
-    if (aMessage.name != "AccessFu:Present" || !aMessage.data) {
-      return;
-    }
-
-    for (let evt of aMessage.data) {
-      if (this.debug) {
-        info("Android event: " + JSON.stringify(evt));
-      }
-      let listener = (
-        this.listenersMap.get(evt.eventType || evt) || []
-      ).shift();
-      if (listener) {
-        listener(evt);
-      }
-    }
-  }
-
-  async expectAndroidEvents(aFunc, ...aExpectedEvents) {
-    let events = Promise.all(aExpectedEvents.map(e => this.androidEvent(e)));
-    aFunc();
-    let gotEvents = await events;
-    return gotEvents.length == 1 ? gotEvents[0] : gotEvents;
-  }
-
-  moveCursor(aArgs, ...aExpectedEvents) {
-    return this.expectAndroidEvents(() => {
-      this.sendMessage({
-        name: "AccessFu:MoveCursor",
-        data: {
-          inputType: "gesture",
-          origin: "top",
-          ...aArgs,
-        },
-      });
-    }, ...aExpectedEvents);
-  }
-
-  moveNext(aRule, ...aExpectedEvents) {
-    return this.moveCursor(
-      { action: "moveNext", rule: aRule },
-      ...aExpectedEvents
-    );
-  }
-
-  movePrevious(aRule, ...aExpectedEvents) {
-    return this.moveCursor(
-      { action: "movePrevious", rule: aRule },
-      ...aExpectedEvents
-    );
-  }
-
-  moveFirst(aRule, ...aExpectedEvents) {
-    return this.moveCursor(
-      { action: "moveFirst", rule: aRule },
-      ...aExpectedEvents
-    );
-  }
-
-  moveLast(aRule, ...aExpectedEvents) {
-    return this.moveCursor(
-      { action: "moveLast", rule: aRule },
-      ...aExpectedEvents
-    );
-  }
-
-  async clearCursor() {
-    return new Promise(resolve => {
-      let _listener = msg => {
-        this.mms.forEach(mm =>
-          mm.removeMessageListener("AccessFu:CursorCleared", _listener)
-        );
-        resolve();
-      };
-      this.mms.forEach(mm =>
-        mm.addMessageListener("AccessFu:CursorCleared", _listener)
-      );
-      this.sendMessage({
-        name: "AccessFu:ClearCursor",
-        data: {
-          origin: "top",
-        },
-      });
-    });
-  }
-
-  focusSelector(aSelector, ...aExpectedEvents) {
-    return this.expectAndroidEvents(() => {
-      this.sendMessage({
-        name: "AccessFuTest:Focus",
-        data: {
-          selector: aSelector,
-        },
-      });
-    }, ...aExpectedEvents);
-  }
-
-  blur(...aExpectedEvents) {
-    return this.expectAndroidEvents(() => {
-      this.sendMessage({ name: "AccessFuTest:Blur" });
-    }, ...aExpectedEvents);
-  }
-
-  activateCurrent(aOffset, ...aExpectedEvents) {
-    return this.expectAndroidEvents(() => {
-      this.sendMessage({
-        name: "AccessFu:Activate",
-        data: {
-          origin: "top",
-          offset: aOffset,
-        },
-      });
-    }, ...aExpectedEvents);
-  }
-
-  typeKey(aKey, ...aExpectedEvents) {
-    return this.expectAndroidEvents(() => {
-      synthesizeKey(aKey, {}, currentTabWindow());
-    }, ...aExpectedEvents);
-  }
-
-  eventTextMatches(aEvent, aExpected) {
-    isDeeply(
-      aEvent.text,
-      aExpected,
-      "Event text matches. " +
-        `Got ${JSON.stringify(aEvent.text)}, expected ${JSON.stringify(
-          aExpected
-        )}.`
-    );
-  }
-
-  eventInfoMatches(aEvent, aExpected) {
-    for (let key in aExpected) {
-      is(
-        aEvent[key],
-        aExpected[key],
-        `Event info matches for ${key}. ` +
-          `Got ${aEvent[key]}, expected ${aExpected[key]}.`
-      );
-    }
-  }
-
-  androidScrollForward() {
-    this.sendMessage({
-      name: "AccessFu:AndroidScroll",
-      data: { origin: "top", direction: "forward" },
-    });
-  }
-
-  androidScrollBackward() {
-    this.sendMessage({
-      name: "AccessFu:AndroidScroll",
-      data: { origin: "top", direction: "backward" },
-    });
-  }
-
-  moveByGranularity(aDirection, aGranularity, ...aExpectedEvents) {
-    return this.expectAndroidEvents(() => {
-      this.sendMessage({
-        name: "AccessFu:MoveByGranularity",
-        data: {
-          direction: aDirection,
-          granularity: aGranularity,
-        },
-      });
-    }, ...aExpectedEvents);
-  }
-
-  moveNextByGranularity(aGranularity, ...aExpectedEvents) {
-    return this.moveByGranularity("Next", aGranularity, ...aExpectedEvents);
-  }
-
-  movePreviousByGranularity(aGranularity, ...aExpectedEvents) {
-    return this.moveByGranularity("Previous", aGranularity, ...aExpectedEvents);
-  }
-}
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/output.js
+++ /dev/null
@@ -1,145 +0,0 @@
-const PREF_UTTERANCE_ORDER = "accessibility.accessfu.utterance";
-
-const { PivotContext } = ChromeUtils.import(
-  "resource://gre/modules/accessibility/Utils.jsm"
-);
-ChromeUtils.import(
-  "resource://gre/modules/accessibility/OutputGenerator.jsm",
-  this
-);
-
-/**
- * Test context output generation.
- *
- * @param expected {Array} expected output.
- * @param aAccOrElmOrID    identifier to get an accessible to test.
- * @param aOldAccOrElmOrID optional identifier to get an accessible relative to
- *                         the |aAccOrElmOrID|.
- * @param aGenerator       the output generator to use when generating accessible
- *                         output
- *
- * Note: if |aOldAccOrElmOrID| is not provided, the |aAccOrElmOrID| must be
- * scoped to the "root" element in markup.
- */
-function testContextOutput(
-  expected,
-  aAccOrElmOrID,
-  aOldAccOrElmOrID,
-  aGenerator
-) {
-  var accessible = getAccessible(aAccOrElmOrID);
-  var oldAccessible =
-    aOldAccOrElmOrID !== null
-      ? getAccessible(aOldAccOrElmOrID || "root")
-      : null;
-  var context = new PivotContext(accessible, oldAccessible);
-  var output = aGenerator.genForContext(context);
-
-  // Create a version of the output that has null members where we have
-  // null members in the expected output. Those are indexes that are not testable
-  // because of the changing nature of the test (different window names), or strings
-  // that are inaccessible to us, like the title of parent documents.
-  var masked_output = [];
-  for (var i = 0; i < output.length; i++) {
-    if (expected[i] === null) {
-      masked_output.push(null);
-    } else {
-      masked_output[i] =
-        typeof output[i] === "string" ? output[i].trim() : output[i];
-    }
-  }
-
-  isDeeply(
-    masked_output,
-    expected,
-    "Context output is correct for " +
-      aAccOrElmOrID +
-      " (output: " +
-      JSON.stringify(output) +
-      ") ==" +
-      " (expected: " +
-      JSON.stringify(expected) +
-      ")"
-  );
-}
-
-/**
- * Test object output generated array that includes names.
- * Note: test ignores outputs without the name.
- *
- * @param aAccOrElmOrID identifier to get an accessible to test.
- * @param aGenerator    the output generator to use when generating accessible
- *                      output
- */
-function testObjectOutput(aAccOrElmOrID, aGenerator) {
-  var accessible = getAccessible(aAccOrElmOrID);
-  if (!accessible.name || !accessible.name.trim()) {
-    return;
-  }
-  var context = new PivotContext(accessible);
-  var output = aGenerator.genForObject(accessible, context);
-  var outputOrder;
-  // eslint-disable-next-line mozilla/use-default-preference-values
-  try {
-    outputOrder = SpecialPowers.getIntPref(PREF_UTTERANCE_ORDER);
-  } catch (ex) {
-    // PREF_UTTERANCE_ORDER not set.
-    outputOrder = 0;
-  }
-  var expectedNameIndex = outputOrder === 0 ? output.length - 1 : 0;
-  var nameIndex = output.indexOf(accessible.name);
-
-  if (nameIndex > -1) {
-    ok(
-      output.indexOf(accessible.name) === expectedNameIndex,
-      "Object output is correct for " + aAccOrElmOrID
-    );
-  }
-}
-
-/**
- * Test object and context output for an accessible.
- *
- * @param expected {Array} expected output.
- * @param aAccOrElmOrID    identifier to get an accessible to test.
- * @param aOldAccOrElmOrID optional identifier to get an accessible relative to
- *                         the |aAccOrElmOrID|.
- * @param aOutputKind      the type of output
- */
-function testOutput(expected, aAccOrElmOrID, aOldAccOrElmOrID) {
-  testContextOutput(
-    expected,
-    aAccOrElmOrID,
-    aOldAccOrElmOrID,
-    UtteranceGenerator
-  );
-  // Just need to test object output for individual
-  // accOrElmOrID.
-  if (aOldAccOrElmOrID) {
-    return;
-  }
-  testObjectOutput(aAccOrElmOrID, UtteranceGenerator);
-}
-
-function testHints(expected, aAccOrElmOrID, aOldAccOrElmOrID) {
-  var accessible = getAccessible(aAccOrElmOrID);
-  var oldAccessible =
-    aOldAccOrElmOrID !== null
-      ? getAccessible(aOldAccOrElmOrID || "root")
-      : null;
-  var context = new PivotContext(accessible, oldAccessible);
-  var hints = context.interactionHints;
-
-  isDeeply(
-    hints,
-    expected,
-    "Context hitns are correct for " +
-      aAccOrElmOrID +
-      " (hints: " +
-      JSON.stringify(hints) +
-      ") ==" +
-      " (expected: " +
-      JSON.stringify(expected) +
-      ")"
-  );
-}
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/test_alive.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<html>
-
-<head>
-  <title>AccessFu test for enabling</title>
-
-  <link rel="stylesheet" type="text/css"
-        href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-  <script type="application/javascript"
-          src="../common.js"></script>
-  <script type="application/javascript"
-          src="./jsatcommon.js"></script>
-  <script type="application/javascript">
-
-    // Listen for 'EventManager.stop' and enable AccessFu again.
-    function settingsStart() {
-      isnot(AccessFu._enabled, true, "AccessFu was disabled.");
-      // XXX: Bug 978076 - test start with SettingsManager.
-      // navigator.mozSettings.createLock().set(
-      //  {'accessibility.screenreader': false});
-      AccessFuTest.once_log("EventManager.start", () => {
-        ok(AccessFu._enabled, "AccessFu was enabled again.");
-        AccessFuTest.nextTest();
-      });
-      AccessFu.enable();
-    }
-
-    // Make sure EventManager is started again.
-    function settingsStop() {
-      ok(AccessFu._enabled, "AccessFu was enabled again.");
-      // XXX: Bug 978076 - test stop with SettingsManager.
-      // navigator.mozSettings.createLock().set(
-      //  {'accessibility.screenreader': false});
-      AccessFuTest.once_log("EventManager.stop", () => {
-        isnot(AccessFu._enabled, "AccessFu was disabled.");
-        AccessFuTest.finish();
-      });
-      AccessFu.disable();
-    }
-
-    function doTest() {
-      AccessFuTest.addFunc(settingsStart);
-      AccessFuTest.addFunc(settingsStop);
-      AccessFuTest.waitForExplicitFinish();
-      AccessFuTest.runTests(); // Will call SimpleTest.finish();
-    }
-
-    SimpleTest.waitForExplicitFinish();
-    addA11yLoadEvent(doTest);
-  </script>
-
-</head>
-<body>
-  <a target="_blank"
-     href="https://bugzilla.mozilla.org/show_bug.cgi?id=811307"
-     title="[AccessFu] Add mochitest for enabling">
-    Mozilla Bug 811307
-  </a>
-</body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/test_content_integration.html
+++ /dev/null
@@ -1,483 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <title>Tests AccessFu content integration</title>
-  <meta charset="utf-8" />
-  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-
-  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js">
-  </script>
-  <script src="chrome://mochikit/content/chrome-harness.js">
-  </script>
-
-  <script type="application/javascript" src="../common.js"></script>
-  <script type="application/javascript" src="../browser.js"></script>
-  <script type="application/javascript" src="../promisified-events.js"></script>
-  <script type="application/javascript" src="../role.js"></script>
-  <script type="application/javascript" src="../states.js"></script>
-  <script type="application/javascript" src="../layout.js"></script>
-  <script type="application/javascript" src="jsatcommon.js"></script>
-
-  <script type="application/javascript">
-    async function testSimpleNavigation(doc, runner) {
-      let evt;
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
-      runner.isFocused("html");
-
-      evt = await runner.movePrevious("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      is(evt.exitView, "movePrevious");
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Back", "button"]);
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["such app", "wow", "heading level 1"]);
-      runner.isFocused("iframe");
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventInfoMatches(evt, { checked: false });
-      runner.eventTextMatches(evt, ["many option", "check button", "First item", "list", "1 item"]);
-
-      evt = await runner.activateCurrent(0,
-        AndroidEvents.VIEW_CLICKED);
-      is(evt.checked, true, "checkbox is checked");
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["many option"]);
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["much range", "label"]);
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["much range", "5", "slider"]);
-
-      expectedMsg = runner.androidEvent("todo.value-changed");
-      runner.androidScrollBackward();
-      evt = await expectedMsg;
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Home", "button"]);
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["apple", "button"]);
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventInfoMatches(evt, { checked: false });
-      runner.eventTextMatches(evt, ["Light", "switch"]);
-
-      evt = await runner.activateCurrent(0,
-        AndroidEvents.VIEW_CLICKED);
-      is(evt.checked, true, "checkbox is checked");
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["slider", "0", "slider", "live"]);
-
-      evt = await runner.movePrevious("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventInfoMatches(evt, { checked: true });
-      runner.eventTextMatches(evt, ["Light", "switch"]);
-
-      evt = await runner.activateCurrent(0,
-        AndroidEvents.VIEW_CLICKED);
-      is(evt.checked, false, "checkbox is checked");
-
-      evt = await runner.movePrevious("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["apple", "button"]);
-
-      evt = await runner.movePrevious("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Home", "button"]);
-
-      evt = await runner.movePrevious("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["such app", "much range", "4", "slider"]);
-
-      expectedMsg = runner.androidEvent("todo.value-changed");
-      runner.androidScrollForward();
-      evt = await expectedMsg;
-
-      expectedMsg = runner.androidEvent("todo.value-changed");
-      runner.androidScrollBackward();
-      evt = await expectedMsg;
-
-      evt = await runner.movePrevious("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["much range", "label"]);
-
-      evt = await runner.movePrevious("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["many option", "label", "First item", "list", "1 item"]);
-
-      evt = await runner.movePrevious("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventInfoMatches(evt, { checked: true });
-      runner.eventTextMatches(evt, ["many option", "check button"]);
-
-      evt = await runner.activateCurrent(0,
-        AndroidEvents.VIEW_CLICKED);
-      is(evt.checked, false, "checkbox is checked");
-
-      evt = await runner.movePrevious("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["wow", "heading level 1"]);
-
-      evt = await runner.movePrevious("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Back", "button"]);
-
-      evt = await runner.movePrevious("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Phone status bar"]);
-
-      // Reached top
-      evt = await runner.movePrevious("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      is(evt.exitView, "movePrevious");
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Back", "button"]);
-
-      // Moving to the absolute last item from an embedded document
-      // fails. Bug 972035.
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["such app", "wow", "heading level 1"]);
-
-      // Move from an inner frame to the last element in the parent doc
-
-      evt = await runner.moveLast("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["much range", "4", "slider"]);
-
-      await runner.clearCursor();
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Back", "button"]);
-
-      evt = await runner.moveNext("FormElement",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventInfoMatches(evt, { checked: false });
-      runner.eventTextMatches(evt, ["such app", "many option", "check button", "First item", "list", "1 item"]);
-
-      evt = await runner.moveNext("FormElement",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["much range", "4", "slider"]);
-
-      evt = await runner.movePrevious("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["much range", "label"]);
-
-      evt = await runner.movePrevious("FormElement",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventInfoMatches(evt, { checked: false });
-      runner.eventTextMatches(evt, ["many option", "check button", "First item", "list", "1 item"]);
-
-      evt = await runner.movePrevious("FormElement",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Back", "button"]);
-
-      await runner.clearCursor();
-
-
-      // Moving to the absolute first item from an embedded document
-      // fails. Bug 972035.
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Back", "button"]);
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["such app", "wow", "heading level 1"]);
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventInfoMatches(evt, { checked: false });
-      runner.eventTextMatches(evt, ["many option", "check button", "First item", "list", "1 item"]);
-
-      evt = await runner.moveFirst("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      todo_is(evt.text[0], "Phone status bar");
-
-      await runner.clearCursor();
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
-
-      evt = await runner.focusSelector("button#fruit",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["apple", "button"]);
-
-      // Current virtual cursor's position's name changes
-      expectedMsg = runner.androidEvent("todo.name-changed");
-      doc.getElementById("fruit").setAttribute("aria-label", "banana");
-      evt = await expectedMsg;
-
-      // Name and value changes inside a live-region (no cursor present)
-      expectedMsg = runner.androidEvent("todo.name-changed");
-      doc.getElementById("slider").setAttribute("aria-label", "mover");
-      evt = await expectedMsg;
-
-      expectedMsg = runner.androidEvent("todo.value-changed");
-      doc.getElementById("slider").setAttribute("aria-valuenow", "5");
-      doc.getElementById("slider").setAttribute("aria-valuetext", "medium");
-      evt = await expectedMsg;
-
-      // Blur button and reset cursor
-      runner.blur();
-      await runner.clearCursor();
-
-      // Move cursor with focus in outside document
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
-
-      evt = await runner.focusSelector("button#home",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Home", "button"]);
-
-      // Blur button and reset cursor
-      runner.blur();
-      await runner.clearCursor();
-
-      // Set focus on element outside of embedded frame while cursor is in frame
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Back", "button"]);
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["such app", "wow", "heading level 1"]);
-
-      evt = await runner.focusSelector("button#home",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Home", "button"]);
-
-      // Blur button and reset cursor
-      runner.blur();
-      await runner.clearCursor();
-
-      // XXX: Set focus on iframe itself.
-      // XXX: Set focus on element in iframe when cursor is outside of it.
-      // XXX: Set focus on element in iframe when cursor is in iframe.
-
-      // aria-hidden element that the virtual cursor is positioned on
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Back", "button"]);
-
-      evt = await runner.expectAndroidEvents(() => {
-        doc.getElementById("back").setAttribute("aria-hidden", true);
-      }, AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["such app", "wow", "heading level 1"]);
-
-      // Changing aria-hidden attribute twice and making sure that the event
-      // is fired only once when the actual change happens.
-      doc.getElementById("back").setAttribute("aria-hidden", true);
-      let onShow = waitForEvent(EVENT_SHOW, doc.getElementById("back"));
-      doc.getElementById("back").setAttribute("aria-hidden", false);
-      await onShow;
-
-      evt = await runner.movePrevious("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Back", "button"]);
-      await runner.clearCursor();
-
-      // aria-hidden on the iframe that has the vc.
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Back", "button"]);
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["such app", "wow", "heading level 1"]);
-
-      evt = await runner.expectAndroidEvents(() => {
-        doc.getElementById("iframe").setAttribute("aria-hidden", true);
-      }, AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Traversal Rule test document", "Home", "button"]);
-
-      onShow = waitForEvent(EVENT_SHOW, doc.getElementById("iframe"));
-      doc.getElementById("iframe").setAttribute("aria-hidden", false);
-      await onShow;
-      await runner.clearCursor();
-
-      // aria-hidden element and auto Move
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
-
-      doc.getElementById("back").setAttribute("aria-hidden", true);
-      evt = await runner.focusSelector("button#back",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["such app", "wow", "heading level 1"]);
-
-      onShow = waitForEvent(EVENT_SHOW, doc.getElementById("back"));
-      doc.getElementById("back").setAttribute("aria-hidden", false);
-      await onShow;
-      runner.blur();
-      await runner.clearCursor();
-
-      // Open dialog in outer doc, while cursor is also in outer doc
-      evt = await runner.moveLast("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Traversal Rule test document", "mover", "medium", "slider", "live"]);
-
-      evt = await runner.expectAndroidEvents(() => {
-        doc.getElementById("alert").hidden = false;
-      }, AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["This is an alert!", "heading level 1", "dialog"]);
-
-      evt = await runner.expectAndroidEvents(() => {
-        doc.getElementById("alert").hidden = true;
-      }, AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Traversal Rule test document", "mover", "medium", "slider", "live"]);
-
-      await runner.clearCursor();
-
-      // Open dialog in outer doc, while cursor is in inner frame
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Back", "button"]);
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["such app", "wow", "heading level 1"]);
-      evt = await runner.expectAndroidEvents(() => {
-        doc.getElementById("alert").hidden = false;
-      }, AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["This is an alert!", "heading level 1", "dialog"]);
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Do you agree?"]);
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Yes", "button"]);
-
-      evt = await runner.activateCurrent(0,
-        AndroidEvents.VIEW_CLICKED,
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt[1], ["such app", "wow", "heading level 1"]);
-
-      await runner.clearCursor();
-
-      // Open dialog, then focus on something when closing
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Traversal Rule test document", "Phone status bar"]);
-      evt = await runner.expectAndroidEvents(() => {
-        doc.getElementById("alert").hidden = false;
-      }, AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["This is an alert!", "heading level 1", "dialog"]);
-
-      evt = await runner.expectAndroidEvents(() => {
-        doc.getElementById("alert").hidden = true;
-        doc.querySelector("button#home").focus();
-      }, AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Traversal Rule test document", "Home", "button"]);
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["banana", "button"]);
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventInfoMatches(evt, { checked: false });
-      runner.eventTextMatches(evt, ["Light", "switch"]);
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["mover", "medium", "slider", "live"]);
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      is(evt.exitView, "moveNext", "Reached end of content");
-    }
-
-    function doTest() {
-      var doc = currentTabDocument();
-      var iframe = doc.createElement("iframe");
-      iframe.id = "iframe";
-      iframe.mozbrowser = true;
-      iframe.addEventListener("mozbrowserloadend", function() {
-        addA11yLoadEvent(async function() {
-          let runner = new AccessFuContentTestRunner();
-          await runner.start();
-
-          await testSimpleNavigation(doc, runner);
-
-          runner.finish();
-          closeBrowserWindow();
-          SimpleTest.finish();
-        }, doc.defaultView);
-      });
-      iframe.src = "data:text/html;charset=utf-8," + doc.defaultView.frameContents;
-      doc.getElementById("appframe").appendChild(iframe);
-    }
-
-    SimpleTest.waitForExplicitFinish();
-    addLoadEvent(
-      function() {
-        openBrowserWindow(
-          function() {
-            SpecialPowers.pushPrefEnv({
-              "set": [
-                // TODO: remove this as part of bug 820712
-                ["network.disable.ipc.security", true],
-
-
-                ["dom.ipc.browser_frames.oop_by_default", true],
-                ["dom.mozBrowserFramesEnabled", true],
-                ["browser.pagethumbnails.capturing_disabled", true],
-              ],
-            }, doTest);
-          },
-          getRootDirectory(window.location.href) + "doc_content_integration.html");
-        });
-  </script>
-</head>
-<body id="body">
-
-  <a target="_blank"
-     title="Add tests for OOP message handling and general integration"
-     href="https://bugzilla.mozilla.org/show_bug.cgi?id=1459677">Mozilla Bug 1459677</a>
-  <p id="display"></p>
-  <div id="content" style="display: none"></div>
-  <pre id="test">
-  </pre>
-</body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/test_explicit_names.html
+++ /dev/null
@@ -1,190 +0,0 @@
-<html>
-<head>
-  <title>[AccessFu] Trust explicitly associated names when speaking certain elements</title>
-
-  <link rel="stylesheet" type="text/css"
-        href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-  <script type="application/javascript"
-          src="../common.js"></script>
-  <script type="application/javascript"
-          src="output.js"></script>
-  <script type="application/javascript">
-
-    function doTest() {
-      // Test the following accOrElmOrID.
-      var tests = [{
-        accOrElmOrID: "anchor1",
-        expected: [{"string": "link"}, "title"],
-      }, {
-        accOrElmOrID: "anchor2",
-        expected: [{"string": "link"}, "This is a link"],
-      }, {
-        accOrElmOrID: "button1",
-        expected: [{"string": "pushbutton"}, "Press me"],
-      }, {
-        accOrElmOrID: "button2",
-        expected: [{"string": "pushbutton"}, "Press me"],
-      }, {
-        accOrElmOrID: "textarea1",
-        expected: [{"string": "textarea"}, "This is the text area text.",
-          "Test Text Area"],
-      }, {
-        accOrElmOrID: "textarea2",
-        expected: [{"string": "textarea"}, "This is the text area text."],
-      }, {
-        accOrElmOrID: "heading1",
-        expected: [{"string": "headingLevel", "args": [1]}, "Test heading",
-          "This is the heading."],
-      }, {
-        accOrElmOrID: "heading1",
-        oldAccOrElmOrID: null,
-        expected: [null /* parent doc title */, document.title,
-          {"string": "headingLevel", "args": [1]}, "Test heading",
-          "This is the heading."],
-      }, {
-        accOrElmOrID: "heading2",
-        expected: [{"string": "headingLevel", "args": [1]},
-          "This is the heading."],
-      }, {
-        accOrElmOrID: "list",
-        expected: [{"string": "list"}, {"string": "listItemsCount", "count": 2},
-          "Test List", {"string": "listStart"}, "Top of the list",
-          {"string": "listEnd"}, "2.", "list two"],
-      }, {
-        accOrElmOrID: "dlist",
-        expected: [{"string": "definitionlist"},
-          {"string": "listItemsCount", "count": 0.5}, "Test Definition List",
-          "dd one"],
-      }, {
-        accOrElmOrID: "li_one",
-        expected: [{"string": "list"}, {"string": "listItemsCount", "count": 2},
-          "Test List", {"string": "listStart"}, "Top of the list"],
-      }, {
-        accOrElmOrID: "li_two",
-        expected: [{"string": "list"}, {"string": "listItemsCount", "count": 2},
-          "Test List", {"string": "listEnd"}, "2.", "list two"],
-      }, {
-        accOrElmOrID: "cell",
-        expected: [{"string": "table"},
-          {"string": "tblColumnInfo", "count": 1},
-          {"string": "tblRowInfo", "count": 1}, "Fruits and vegetables",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}, "List of Fruits",
-          {"string": "list"}, {"string": "listItemsCount", "count": 4},
-          {"string": "listStart"}, {"string": "link"}, "Apples",
-          {"string": "link"}, "Bananas",
-          {"string": "link"}, "Peaches", {"string": "listEnd"},
-          {"string": "link"}, "Plums"],
-      }, {
-        accOrElmOrID: "app.net",
-        expected: [{"string": "list"}, {"string": "listItemsCount", "count": 2},
-          {"string": "listStart"}, {"string": "link"}, "star",
-          {"string": "listEnd"}, {"string": "link"}, "repost"],
-      }, {
-        // Test pivot to list from li_one.
-        accOrElmOrID: "list",
-        oldAccOrElmOrID: "li_one",
-        expected: [{"string": "list"}, {"string": "listItemsCount", "count": 2},
-          "Test List", {"string": "listStart"}, "Top of the list",
-          {"string": "listEnd"}, "2.", "list two"],
-      }, {
-        // Test pivot to li_one from list.
-        accOrElmOrID: "li_one",
-        oldAccOrElmOrID: "list",
-        expected: [{"string": "listStart"}, "Top of the list"],
-      }, {
-        // Test pivot to "apples" link from the table cell.
-        accOrElmOrID: "apples",
-        oldAccOrElmOrID: "cell",
-        expected: [{"string": "list"}, {"string": "listItemsCount", "count": 4},
-          {"string": "listStart"}, {"string": "link"}, "Apples"],
-      }, {
-        // Test pivot to the table cell from the "apples" link.
-        accOrElmOrID: "cell",
-        oldAccOrElmOrID: "apples",
-        expected: ["List of Fruits", {"string": "list"},
-          {"string": "listItemsCount", "count": 4}, {"string": "listStart"},
-          {"string": "link"}, "Apples", {"string": "link"}, "Bananas",
-          {"string": "link"}, "Peaches", {"string": "listEnd"},
-          {"string": "link"}, "Plums"],
-      }];
-
-      SpecialPowers.pushPrefEnv({"set": [[PREF_UTTERANCE_ORDER, 0]]}, function() {
-        // Test various explicit names vs the utterance generated from subtrees.
-        tests.forEach(function run(test) {
-          testOutput(test.expected, test.accOrElmOrID, test.oldAccOrElmOrID);
-        });
-        SimpleTest.finish();
-      });
-    }
-
-    SimpleTest.waitForExplicitFinish();
-    addA11yLoadEvent(doTest);
-  </script>
-</head>
-<body>
-  <div id="root">
-    <a target="_blank"
-       href="https://bugzilla.mozilla.org/show_bug.cgi?id=845870"
-       title="[AccessFu] Trust explicitly associated names when speaking certain elements">
-       Mozilla Bug 845870
-       </a>
-    <p id="display"></p>
-    <div id="content" style="display: none"></div>
-    <pre id="test"></pre>
-    <button id="button1" aria-label="Press me">This is not a name</button>
-    <button id="button2">
-      Press me
-    </button>
-    <a id="anchor1" href="#test" title="title"></a>
-    <a id="anchor2" href="#test">This is a link</a>
-    <textarea id="textarea1" title="Test Text Area" cols="80" rows="5">This is the text area text.</textarea>
-    <textarea id="textarea2" cols="80" rows="5">
-      This is the text area text.
-    </textarea>
-    <h1 id="heading1" title="Test heading">This is the heading.</h1>
-    <h1 id="heading2">
-      This is the heading.
-    </h1>
-    <ol id="list" title="Test List">
-      <li id="li_one" aria-label="Top of the list">list one</li>
-      <li id="li_two">list two</li>
-    </ol>
-    <dl id="dlist" title="Test Definition List">
-      <dd id="dd_one">dd one</dd>
-    </dl>
-    <table>
-      <caption>Fruits and vegetables</caption>
-      <tr>
-        <td id="cell" aria-label="List of Fruits">
-          <ul style="list-style-type: none;">
-            <li><a id="apples" href="#">Apples</a></li>
-            <li><a id="bananas" href="#">Bananas</a></li>
-            <li><a href="#">Peaches</a></li>
-            <li>
-              <a href="#">
-
-                Plums
-              </a>
-            </li>
-          </ul>
-        </td>
-      </tr>
-    </table>
-    <!-- app.net -->
-    <ul id="app.net" class="unstyled ul-horizontal yui3-u fixed-right ta-right" style="list-style-type: none;">
-      <li class="yui3-u">
-        <a href="#star" data-starred="0" data-star-button="1" data-post-id="5098826" aria-label="star">
-          Garbage
-        </a>
-      </li>
-      <li class="yui3-u repost">
-        <a href="#repost" title="repost" data-repost-button="1" data-reposted="0" data-post-id="5098826">
-          <i aria-label="repost" class="icon-repost"></i>
-        </a>
-      </li>
-    </ul>
-  </div>
-</body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/test_hints.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<html>
-<head>
-  <title> [AccessFu] Interaction Hints </title>
-
-  <link rel="stylesheet" type="text/css"
-        href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-  <script type="application/javascript"
-          src="../common.js"></script>
-  <script type="application/javascript"
-          src="output.js"></script>
-  <script type="application/javascript">
-
-    function doTest() {
-      var tests = [{
-        accOrElmOrID: "can_wheel",
-        expectedHints: ["Swipe with two fingers to move between pages"],
-      }, {
-        accOrElmOrID: "nested_link",
-        expectedHints: [{string: "link-hint"},
-          "Swipe with two fingers to move between pages"],
-      }, {
-        accOrElmOrID: "nested_link",
-        oldAccOrElmOrID: "can_wheel",
-        expectedHints: [{string: "link-hint"}],
-      }, {
-        accOrElmOrID: "link_with_default_hint",
-        expectedHints: [{string: "link-hint"}],
-      }, {
-        accOrElmOrID: "link_with_hint_override",
-        expectedHints: ["Tap and hold to get to menu"],
-      }, {
-        accOrElmOrID: "button_with_default_hint",
-        expectedHints: [{string: "pushbutton-hint"}],
-      }, {
-        accOrElmOrID: "button_with_hint_override",
-        expectedHints: ["Tap and hold to activate"],
-      }, {
-        accOrElmOrID: "nested_link2",
-        expectedHints: [{string: "link-hint"}],
-      }, {
-        accOrElmOrID: "nested_link3",
-        expectedHints: [{string: "link-hint"}, {string: "pushbutton-hint"},
-          "Double tap and hold to activate"],
-      }, {
-        accOrElmOrID: "menuitemradio",
-        expectedHints: [{string: "radiomenuitem-hint"}],
-      }];
-
-      // Test hints.
-      tests.forEach(function run(test) {
-        testHints(test.expectedHints, test.accOrElmOrID, test.oldAccOrElmOrID);
-      });
-
-      SimpleTest.finish();
-    }
-
-    SimpleTest.waitForExplicitFinish();
-    addA11yLoadEvent(doTest);
-  </script>
-</head>
-<body>
-  <div id="root">
-    <a target="_blank"
-       href="https://bugzilla.mozilla.org/show_bug.cgi?id=1069574"
-       title="[AccessFu] Interaction Hints">
-       Mozilla Bug 1069574
-       </a>
-    <p id="display"></p>
-    <div id="content" style="display: none"></div>
-    <pre id="test"></pre>
-      <span role="region" id="can_wheel" aria-moz-hint="Swipe with two fingers to move between pages">
-        <a href="#" id="nested_link">I can be clicked</a>
-      </span>
-      <span role="region" aria-moz-hint="">
-        <a><a href="#" id="nested_link2">I can be clicked</a></a>
-      </span>
-      <span role="region" aria-moz-hint="Double tap and hold to activate">
-        <button><a href="#" id="nested_link3">I can be clicked</a></button>
-      </span>
-      <a href="#" id="link_with_default_hint">I can be clicked</a>
-      <a href="#" id="link_with_hint_override" aria-moz-hint="Tap and hold to get to menu">I am a special link</a>
-      <button id="button_with_default_hint">Toggle</button>
-      <button id="button_with_hint_override" aria-moz-hint="Tap and hold to activate">Special</button>
-      <span id="menuitemradio" role="menuitemradio">Item 1</span>
-  </div>
-</body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/test_landmarks.html
+++ /dev/null
@@ -1,199 +0,0 @@
-<html>
-<head>
-  <title> [AccessFu] Speak landmarks</title>
-
-  <link rel="stylesheet" type="text/css"
-        href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-  <script type="application/javascript"
-          src="../common.js"></script>
-  <script type="application/javascript"
-          src="output.js"></script>
-  <script type="application/javascript"
-          src="jsatcommon.js"></script>
-  <script type="application/javascript">
-
-    function doTest() {
-      // Test the following accOrElmOrID.
-      var tests = [{
-        accOrElmOrID: "nav",
-        expectedUtterance: [[{"string": "navigation"}, "a nav"],
-                            ["a nav", {"string": "navigation"}]],
-        expectedBraille: [[{"string": "navigation"}, "a nav"],
-                          ["a nav", {"string": "navigation"}]],
-      }, {
-        accOrElmOrID: "main",
-        expectedUtterance: [[{"string": "main"}, "a main area"],
-                            ["a main area", {"string": "main"}]],
-        expectedBraille: [[{"string": "main"}, "a main area"],
-                          ["a main area", {"string": "main"}]],
-      }, {
-        accOrElmOrID: "header",
-        expectedUtterance: [
-          [{"string": "banner"}, {"string": "header"}, "a header"],
-          ["a header", {"string": "header"}, {"string": "banner"}]],
-        expectedBraille: [
-          [{"string": "banner"}, {"string": "headerAbbr"}, "a header"],
-          ["a header", {"string": "headerAbbr"}, {"string": "banner"}]],
-      }, {
-        accOrElmOrID: "footer",
-        expectedUtterance: [
-          [{"string": "contentinfo"}, {"string": "footer"}, "a footer"],
-          ["a footer", {"string": "footer"}, {"string": "contentinfo"}]],
-        expectedBraille: [
-          [{"string": "contentinfo"}, {"string": "footerAbbr"}, "a footer"],
-          ["a footer", {"string": "footerAbbr"}, {"string": "contentinfo"}]],
-      }, {
-        accOrElmOrID: "article_header",
-        expectedUtterance: [
-          ["a header within an article"],
-          ["a header within an article"]],
-        expectedBraille: [
-          ["a header within an article"],
-          ["a header within an article"]],
-      }, {
-        accOrElmOrID: "article_footer",
-        expectedUtterance: [
-          ["a footer within an article"],
-          ["a footer within an article"]],
-        expectedBraille: [
-          ["a footer within an article"],
-          ["a footer within an article"]],
-      }, {
-        accOrElmOrID: "main_header",
-        expectedUtterance: [["a header within main content"],
-                            ["a header within main content"]],
-        expectedBraille: [
-          ["a header within main content"],
-          ["a header within main content"]],
-      }, {
-        accOrElmOrID: "main_footer",
-        expectedUtterance: [
-          ["a footer within main content"],
-          ["a footer within main content"]],
-        expectedBraille: [
-          ["a footer within main content"],
-          ["a footer within main content"]],
-      }, {
-        accOrElmOrID: "section_header",
-        expectedUtterance: [["a header within a section"],
-                            ["a header within a section"]],
-        expectedBraille: [
-          ["a header within a section"],
-          ["a header within a section"]],
-      }, {
-        accOrElmOrID: "section_footer",
-        expectedUtterance: [
-          ["a footer within a section"],
-          ["a footer within a section"]],
-        expectedBraille: [
-          ["a footer within a section"],
-          ["a footer within a section"]],
-      }, {
-        accOrElmOrID: "aside",
-        expectedUtterance: [
-          [{"string": "complementary"}, "by the way I am an aside"],
-          ["by the way I am an aside", {"string": "complementary"}]],
-        expectedBraille: [
-          [{"string": "complementary"}, "by the way I am an aside"],
-          ["by the way I am an aside", {"string": "complementary"}]],
-      }, {
-        accOrElmOrID: "main_element",
-        expectedUtterance: [[{"string": "main"}, "another main area"],
-                            ["another main area", {"string": "main"}]],
-        expectedBraille: [[{"string": "main"}, "another main area"],
-                          ["another main area", {"string": "main"}]],
-      }, {
-        accOrElmOrID: "complementary",
-        expectedUtterance: [[{"string": "list"},
-          {"string": "listItemsCount", "count": 1}, {"string": "complementary"},
-          {"string": "listStart"}, "A complementary"], ["A complementary",
-          {"string": "listStart"}, {"string": "complementary"},
-          {"string": "list"}, {"string": "listItemsCount", "count": 1}]],
-        expectedBraille: [["*", {"string": "complementary"}, "A complementary"],
-                          ["*", "A complementary", {"string": "complementary"}]],
-      }, {
-        accOrElmOrID: "parent_main",
-        expectedUtterance: [[{"string": "main"}, "a parent main",
-          {"string": "complementary"}, "a child complementary"],
-          ["a parent main", "a child complementary",
-          {"string": "complementary"}, {"string": "main"}]],
-        expectedBraille: [[{"string": "main"}, "a parent main",
-          {"string": "complementary"}, "a child complementary"],
-          ["a parent main", "a child complementary",
-          {"string": "complementary"}, {"string": "main"}]],
-      }, {
-        accOrElmOrID: "child_complementary",
-        expectedUtterance: [[{"string": "main"}, {"string": "complementary"},
-          "a child complementary"], ["a child complementary",
-          {"string": "complementary"}, {"string": "main"}]],
-        expectedBraille: [[{"string": "complementary"},
-          "a child complementary"], ["a child complementary",
-          {"string": "complementary"}]],
-      }];
-
-      // Test outputs (utterance and braille) for landmarks.
-      function testOutputOrder(aOutputOrder) {
-        return function() {
-          SpecialPowers.pushPrefEnv({
-            "set": [[PREF_UTTERANCE_ORDER, aOutputOrder]],
-          }, function() {
-            tests.forEach(function run(test) {
-              testOutput(test.expectedUtterance[aOutputOrder], test.accOrElmOrID,
-                test.oldAccOrElmOrID);
-            });
-            AccessFuTest.nextTest();
-          });
-        };
-      }
-
-      AccessFuTest.addFunc(testOutputOrder(0));
-      AccessFuTest.addFunc(testOutputOrder(1));
-      AccessFuTest.waitForExplicitFinish();
-      AccessFuTest.runTests();
-    }
-
-    SimpleTest.waitForExplicitFinish();
-    addA11yLoadEvent(doTest);
-  </script>
-</head>
-<body>
-  <div id="root">
-    <a target="_blank"
-       href="https://bugzilla.mozilla.org/show_bug.cgi?id=888256"
-       title="[AccessFu] Speak landmarks">
-       Mozilla Bug 888256
-       </a>
-    <p id="display"></p>
-    <div id="content" style="display: none"></div>
-    <pre id="test"></pre>
-    <nav id="nav">a nav</nav>
-    <header id="header">a header</header>
-    <footer id="footer">a footer</footer>
-    <article id="article_with_header_and_footer">
-      <header id="article_header">a header within an article</header>
-      <footer id="article_footer">a footer within an article</footer>
-    </article>
-    <main id="main_with_header_and_footer">
-      <header id="main_header">a header within main content</header>
-      <footer id="main_footer">a footer within main content</footer>
-    </main>
-    <section id="section_with_header_and_footer">
-      <header id="section_header">a header within a section</header>
-      <footer id="section_footer">a footer within a section</footer>
-    </section>
-    <aside id="aside">by the way I am an aside</aside>
-    <article id="main" role="main">a main area</article>
-    <main id="main_element">another main area</main>
-    <ul style="list-style-type: none;">
-      <li role="complementary" id="complementary">
-        A complementary
-      </li>
-    </ul>
-    <main id="parent_main">
-      a parent main
-      <p id="child_complementary" role="complementary">a child complementary</article>
-    </main>
-  </div>
-</body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/test_live_regions.html
+++ /dev/null
@@ -1,541 +0,0 @@
-<html>
-
-<head>
-  <title>AccessFu tests for live regions support</title>
-
-  <link rel="stylesheet" type="text/css"
-        href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-  <script type="application/javascript"
-          src="../common.js"></script>
-  <script type="application/javascript"
-          src="./jsatcommon.js"></script>
-  <script type="application/javascript">
-    function startAccessFu() {
-      AccessFuTest.once_log("EventManager.start", AccessFuTest.nextTest);
-      AccessFu.enable();
-    }
-
-    function stopAccessFu() {
-      AccessFuTest.once_log("EventManager.stop", () => AccessFuTest.finish());
-      AccessFu.disable();
-    }
-
-    function hide(id) {
-      var element = document.getElementById(id);
-      element.style.display = "none";
-    }
-
-    function show(id) {
-      var element = document.getElementById(id);
-      element.style.display = "block";
-    }
-
-    function ariaHide(id) {
-      var element = document.getElementById(id);
-      element.setAttribute("aria-hidden", true);
-    }
-
-    function ariaShow(id) {
-      var element = document.getElementById(id);
-      element.setAttribute("aria-hidden", false);
-    }
-
-    function udpate(id, text, property) {
-      var element = document.getElementById(id);
-      element[property] = text;
-    }
-
-    function updateText(id, text) {
-      udpate(id, text, "textContent");
-    }
-
-    function updateHTML(id, text) {
-      udpate(id, text, "innerHTML");
-    }
-
-    var tests = [{
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["hidden I will be hidden"],
-        "addedCount": "hidden I will be hidden".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": true
-        // }
-      }],
-      action: function action() {
-        ["to_hide1", "to_hide2", "to_hide3", "to_hide4"].forEach(id => hide(id));
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["hidden I will be hidden"],
-        "addedCount": "hidden I will be hidden".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": true
-        // }
-      }],
-      action: function action() {
-        ["to_hide_descendant1", "to_hide_descendant2",
-         "to_hide_descendant3", "to_hide_descendant4"].forEach(id => hide(id));
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["I will be shown"],
-        "addedCount": "I will be shown".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": true
-        // }
-      }],
-      action: function action() {
-        ["to_show1", "to_show2", "to_show3", "to_show4"].forEach(id => show(id));
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["I will be shown"],
-        "addedCount": "I will be shown".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": true
-        // }
-      }],
-      action: function action() {
-        ["to_show_descendant1", "to_show_descendant2",
-         "to_show_descendant3", "to_show_descendant4"].forEach(id => show(id));
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["hidden I will be hidden"],
-        "addedCount": "hidden I will be hidden".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": true
-        // }
-      }],
-      action: function action() {
-        ["to_hide5", "to_hide6", "to_hide7", "to_hide8", "to_hide9"].forEach(id => ariaHide(id));
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["hidden I will be hidden"],
-        "addedCount": "hidden I will be hidden".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": true
-        // }
-      }],
-      action: function action() {
-        ["to_hide_descendant5", "to_hide_descendant6",
-         "to_hide_descendant7", "to_hide_descendant8"].forEach(id => ariaHide(id));
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["I will be shown"],
-        "addedCount": "I will be shown".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": true
-        // }
-      }],
-      action: function action() {
-        ["to_show5", "to_show6", "to_show7", "to_show8", "to_show9"].forEach(id => ariaShow(id));
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["I will be shown"],
-        "addedCount": "I will be shown".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": true
-        // }
-      }],
-      action: function action() {
-        ["to_show_descendant5", "to_show_descendant6",
-         "to_show_descendant7", "to_show_descendant8"].forEach(id => ariaShow(id));
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["hidden I will be hidden"],
-        "addedCount": "hidden I will be hidden".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": false
-        // }
-      }],
-      action: function action() {
-        hide("to_hide_live_assertive");
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["hidden I will be hidden"],
-        "addedCount": "hidden I will be hidden".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": false
-        // }
-      }],
-      action: function action() {
-        ariaHide("to_hide_live_assertive2");
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["I will be shown"],
-        "addedCount": "I will be shown".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": false
-        // }
-      }],
-      action: function action() {
-        ["to_show_live_off", "to_show_live_assertive"].forEach(id => show(id));
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["I will be shown"],
-        "addedCount": "I will be shown".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": false
-        // }
-      }],
-      action: function action() {
-        ["to_show_live_off2", "to_show_live_assertive2"].forEach(id => ariaShow(id));
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["Text Added"],
-        "addedCount": "Text Added".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": false
-        // }
-      }],
-      action: function action() {
-        updateText("text_add", "Text Added");
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["Text Added"],
-        "addedCount": "Text Added".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": false
-        // }
-      }],
-      action: function action() {
-        updateHTML("text_add", "Text Added");
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["hidden Text Removed"],
-        "addedCount": "hidden Text Removed".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": true
-        // }
-      }],
-      action: function action() {
-        updateText("text_remove", "");
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["Descendant Text Added"],
-        "addedCount": "Descendant Text Added".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": false
-        // }
-      }],
-      action: function action() {
-        updateText("text_add_descendant", "Descendant Text Added");
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["Descendant Text Added"],
-        "addedCount": "Descendant Text Added".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": false
-        // }
-      }],
-      action: function action() {
-        updateHTML("text_add_descendant", "Descendant Text Added");
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["hidden Descendant Text Removed"],
-        "addedCount": "hidden Descendant Text Removed".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": true
-        // }
-      }],
-      action: function action() {
-        updateText("text_remove_descendant", "");
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["Descendant Text Added"],
-        "addedCount": "Descendant Text Added".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": false
-        // }
-      }],
-      action: function action() {
-        updateText("text_add_descendant2", "Descendant Text Added");
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["Descendant Text Added"],
-        "addedCount": "Descendant Text Added".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": false
-        // }
-      }],
-      action: function action() {
-        updateHTML("text_add_descendant2", "Descendant Text Added");
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["hidden Descendant Text Removed"],
-        "addedCount": "hidden Descendant Text Removed".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": true
-        // }
-      }],
-      action: function action() {
-        updateText("text_remove_descendant2", "");
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["I am replaced main"],
-        "addedCount": "I am replaced main".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": true
-        // }
-      }],
-      action: function action() {
-        var child = document.getElementById("to_replace");
-        child.setAttribute("role", "main");
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["I am a replaced text"],
-        "addedCount": "I am a replaced text".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": false
-        // }
-      }],
-      action: function action() {
-        updateText("to_replace_text", "I am a replaced text");
-      },
-    }, {
-      expected: [{
-        "eventType": AndroidEvents.ANNOUNCEMENT,
-        "text": ["I am a replaced text"],
-        "addedCount": "I am a replaced text".length,
-        "removedCount": 0,
-        "fromIndex": 0,
-        // "options": {
-        //   "enqueue": false
-        // }
-      }],
-      action: function action() {
-        updateHTML("to_replace_text", "I am a replaced text");
-      },
-    }];
-
-    function doTest() {
-      AccessFuTest.addFunc(startAccessFu);
-      tests.forEach(function addTest(test) {
-        AccessFuTest.addFunc(function() {
-          AccessFuTest.once(test.expected, AccessFuTest.nextTest);
-          test.action();
-        });
-      });
-      AccessFuTest.addFunc(stopAccessFu);
-      AccessFuTest.waitForExplicitFinish();
-      AccessFuTest.runTests();
-    }
-
-    SimpleTest.waitForExplicitFinish();
-    addA11yLoadEvent(doTest);
-  </script>
-
-</head>
-<body>
-  <a target="_blank"
-     href="https://bugzilla.mozilla.org/show_bug.cgi?id=795957"
-     title="[AccessFu] Support live regions">
-    Mozilla Bug 795957
-  </a>
-  <div id="root">
-    <p id="display"></p>
-    <div id="content" style="display: none"></div>
-    <pre id="test"></pre>
-
-    <p id="to_hide1">I should not be announced 1</p>
-    <p id="to_hide2" aria-live="polite">I should not be announced 2</p>
-    <p id="to_hide3" aria-live="assertive" aria-relevant="text">I should not be announced 3</p>
-    <p id="to_hide4" aria-live="polite" aria-relevant="all">I will be hidden</p>
-
-    <p id="to_hide5" aria-hidden="true">I should not be announced 5</p>
-    <p id="to_hide6">I should not be announced 6</p>
-    <p id="to_hide7" aria-live="polite">I should not be announced 7</p>
-    <p id="to_hide8" aria-live="assertive" aria-relevant="text">I should not be announced 8</p>
-    <p id="to_hide9" aria-live="polite" aria-relevant="all">I will be hidden</p>
-
-    <div>
-      <p id="to_hide_descendant1">I should not be announced 1</p>
-    </div>
-    <div aria-live="polite">
-      <p id="to_hide_descendant2">I should not be announced 2</p>
-    </div>
-    <div aria-live="assertive" aria-relevant="text">
-      <p id="to_hide_descendant3">I should not be announced 3</p>
-    </div>
-    <div aria-live="polite" aria-relevant="all">
-      <p id="to_hide_descendant4">I will be hidden</p>
-    </div>
-
-    <div>
-      <p id="to_hide_descendant5">I should not be announced 4</p>
-    </div>
-    <div aria-live="polite">
-      <p id="to_hide_descendant6">I should not be announced 5</p>
-    </div>
-    <div aria-live="assertive" aria-relevant="text">
-      <p id="to_hide_descendant7">I should not be announced 6</p>
-    </div>
-    <div aria-live="polite" aria-relevant="all">
-      <p id="to_hide_descendant8">I will be hidden</p>
-    </div>
-
-    <p id="to_show1" style="display: none">I should not be announced 1</p>
-    <p id="to_show2" aria-live="assertive" aria-relevant="text" style="display: none">I should not be announced 2</p>
-    <p id="to_show3" aria-live="polite" aria-relevant="removals" style="display: none">I should not be announced 3</p>
-    <p id="to_show4" aria-live="polite" aria-relevant="all" style="display: none">I will be shown</p>
-
-    <p id="to_show5" aria-hidden="false">I should not be announced 5</p>
-    <p id="to_show6" aria-hidden="true">I should not be announced 6</p>
-    <p id="to_show7" aria-hidden="true" aria-live="assertive" aria-relevant="text">I should not be announced 7</p>
-    <p id="to_show8" aria-hidden="true" aria-live="polite" aria-relevant="removals">I should not be announced 8</p>
-    <p id="to_show9" aria-hidden="true" aria-live="polite" aria-relevant="all">I will be shown</p>
-
-    <div>
-      <p id="to_show_descendant1" style="display: none">I should not be announced 1</p>
-    </div>
-    <div aria-live="polite" aria-relevant="removals">
-      <p id="to_show_descendant2" style="display: none">I should not be announced 2</p>
-    </div>
-    <div aria-live="assertive" aria-relevant="text">
-      <p id="to_show_descendant3" style="display: none">I should not be announced 3</p>
-    </div>
-    <div aria-live="polite" aria-relevant="all">
-      <p id="to_show_descendant4" style="display: none">I will be shown</p>
-    </div>
-
-    <div>
-      <p id="to_show_descendant5" aria-hidden="true">I should not be announced 5</p>
-    </div>
-    <div aria-live="polite" aria-relevant="removals">
-      <p id="to_show_descendant6" aria-hidden="true">I should not be announced 6</p>
-    </div>
-    <div aria-live="assertive" aria-relevant="text">
-      <p id="to_show_descendant7" aria-hidden="true">I should not be announced 7</p>
-    </div>
-    <div aria-live="polite" aria-relevant="all">
-      <p id="to_show_descendant8" aria-hidden="true">I will be shown</p>
-    </div>
-
-    <div aria-live="assertive" aria-relevant="all">
-      <p id="to_hide_live_assertive">I will be hidden</p>
-    </div>
-
-    <div aria-live="assertive" aria-relevant="all">
-      <p id="to_hide_live_assertive2">I will be hidden</p>
-    </div>
-    <p id="to_show_live_assertive" aria-live="assertive" style="display: none">I will be shown</p>
-
-    <p id="to_show_live_off" aria-live="off" style="display: none">I will not be shown</p>
-
-    <p id="to_show_live_assertive2" aria-live="assertive" aria-hidden="true">I will be shown</p>
-
-    <p id="to_show_live_off2" aria-live="off" aria-hidden="true">I will not be shown</p>
-
-    <div id="to_replace_region" aria-live="polite" aria-relevant="all">
-      <p id="to_replace">I am replaced</p>
-    </div>
-
-    <p id="to_replace_text" aria-live="assertive" aria-relevant="text">I am going to be replaced</p>
-
-    <p id="text_add" aria-live="assertive" aria-relevant="text"></p>
-    <p id="text_remove" aria-live="polite" aria-relevant="all">Text Removed</p>
-
-    <div aria-live="assertive" aria-relevant="all">
-      <p id="text_add_descendant"></p>
-    </div>
-    <div aria-live="polite" aria-relevant="text">
-      <p id="text_remove_descendant">Descendant Text Removed</p>
-    </div>
-    <div aria-live="assertive" aria-relevant="text">
-      <p id="text_add_descendant2"></p>
-    </div>
-    <div aria-live="polite" aria-relevant="all">
-      <p id="text_remove_descendant2">Descendant Text Removed</p>
-    </div>
-  </div>
-</body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/test_output.html
+++ /dev/null
@@ -1,631 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=753984
--->
-  <head>
-    <title>[AccessFu] utterance order test</title>
-    <meta charset="utf-8">
-    <link rel="stylesheet" type="text/css"
-          href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-    <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-    <script type="application/javascript"
-            src="../common.js"></script>
-    <script type="application/javascript"
-            src="./output.js"></script>
-    <script type="application/javascript"
-            src="./jsatcommon.js"></script>
-    <script type="application/javascript">
-
-      function doTest() {
-        // Test the following accOrElmOrID (with optional old accOrElmOrID).
-        // Note: each accOrElmOrID entry maps to a unique object utterance
-        // generator function within the UtteranceGenerator.
-        var tests = [{
-          accOrElmOrID: "anchor",
-          expectedUtterance: [[{"string": "link"}, "title"],
-            ["title", {"string": "link"}]],
-          expectedBraille: [[{"string": "linkAbbr"}, "title"],
-            ["title", {"string": "linkAbbr"}]],
-        }, {
-          accOrElmOrID: "anchor_titleandtext",
-          expectedUtterance: [[{"string": "link"}, "goes to the tests",
-            "Tests"], ["Tests", "goes to the tests", {"string": "link"}]],
-          expectedBraille:   [[{"string": "linkAbbr"}, "goes to the tests",
-            "Tests"], ["Tests", "goes to the tests", {"string": "linkAbbr"}]],
-        }, {
-          accOrElmOrID: "anchor_duplicatedtitleandtext",
-          expectedUtterance: [[{"string": "link"}, "Tests"],
-            ["Tests", {"string": "link"}]],
-          expectedBraille: [[{"string": "linkAbbr"}, "Tests"],
-            ["Tests", {"string": "linkAbbr"}]],
-        }, {
-          accOrElmOrID: "anchor_arialabelandtext",
-          expectedUtterance: [[{"string": "link"}, "goes to the tests - Tests"],
-            ["Tests - goes to the tests", {"string": "link"}]],
-          expectedBraille: [[{"string": "linkAbbr"},
-            "goes to the tests - Tests"], ["Tests - goes to the tests",
-            {"string": "linkAbbr"}]],
-        }, {
-          accOrElmOrID: "textarea",
-          expectedUtterance: [[{"string": "textarea"},
-            "This is the text area text."], ["This is the text area text.",
-            {"string": "textarea"}]],
-          expectedBraille: [[{"string": "textareaAbbr"},
-            "This is the text area text."], ["This is the text area text.",
-            {"string": "textareaAbbr"}]],
-        }, {
-          accOrElmOrID: "heading",
-          expectedUtterance: [[{"string": "headingLevel", "args": [1]},
-            "Test heading"], ["Test heading",
-            {"string": "headingLevel", "args": [1]}]],
-          expectedBraille: [[{"string": "headingAbbr"}, "Test heading"],
-                            ["Test heading", {"string": "headingAbbr"}]],
-        }, {
-          accOrElmOrID: "list",
-          expectedUtterance: [[{"string": "list"},
-            {"string": "listItemsCount", "count": 1}, {"string": "listStart"},
-            "1.", "list one"], ["1.", "list one", {"string": "listStart"},
-            {"string": "list"}, {"string": "listItemsCount", "count": 1}],
-          ],
-          expectedBraille: [[{"string": "listAbbr"}, "list one"],
-            ["list one", {"string": "listAbbr"}]],
-        }, {
-          accOrElmOrID: "dlist",
-          expectedUtterance: [[{"string": "definitionlist"},
-            {"string": "listItemsCount", "count": 0.5}, "dd one"], ["dd one",
-            {"string": "definitionlist"},
-            {"string": "listItemsCount", "count": 0.5}],
-          ],
-          expectedBraille: [[{"string": "definitionlistAbbr"}, "dd one"],
-                            ["dd one", {"string": "definitionlistAbbr"}]],
-        }, {
-          accOrElmOrID: "li_one",
-          expectedUtterance: [[{"string": "list"},
-            {"string": "listItemsCount", "count": 1}, {"string": "listStart"},
-            "1.", "list one"], ["1.", "list one", {"string": "listStart"},
-            {"string": "list"}, {"string": "listItemsCount", "count": 1}],
-          ],
-          expectedBraille: [["1.", "list one"], ["1.", "list one"]],
-        },
-        {
-          accOrElmOrID: "li_two",
-          expectedUtterance: [[{"string": "list"},
-            {"string": "listItemsCount", "count": 1}, {"string": "listStart"},
-            "list two"], ["list two", {"string": "listStart"},
-            {"string": "list"}, {"string": "listItemsCount", "count": 1}],
-          ],
-          expectedBraille: [["*", "list two"], ["*", "list two"]],
-        }, {
-          accOrElmOrID: "cell",
-          expectedUtterance: [[{"string": "table"},
-            {"string": "tblColumnInfo", "count": 1},
-            {"string": "tblRowInfo", "count": 1}, "Fruits and vegetables",
-            {"string": "columnInfo", "args": [1]},
-            {"string": "rowInfo", "args": [1]}, {"string": "list"},
-            {"string": "listItemsCount", "count": 4}, {"string": "listStart"},
-            {"string": "link"}, "Apples", {"string": "link"}, "Bananas",
-            {"string": "link"}, "Peaches", {"string": "listEnd"},
-            {"string": "link"}, "Plums"], ["Apples", {"string": "link"},
-            {"string": "listStart"}, "Bananas", {"string": "link"}, "Peaches",
-            {"string": "link"}, "Plums", {"string": "link"},
-            {"string": "listEnd"}, {"string": "list"},
-            {"string": "listItemsCount", "count": 4},
-            {"string": "columnInfo", "args": [1]},
-            {"string": "rowInfo", "args": [1]}, "Fruits and vegetables",
-            {"string": "table"}, {"string": "tblColumnInfo", "count": 1},
-            {"string": "tblRowInfo", "count": 1}]],
-          expectedBraille: [[{"string": "cellInfoAbbr", "args": [ 1, 1]},
-            {"string": "listAbbr"}, {"string": "linkAbbr"}, "Apples",
-            {"string": "linkAbbr"}, "Bananas", {"string": "linkAbbr"},
-            "Peaches", {"string": "linkAbbr"}, "Plums"], ["Apples",
-            {"string": "linkAbbr"}, "Bananas", {"string": "linkAbbr"},
-            "Peaches", {"string": "linkAbbr"}, "Plums", {"string": "linkAbbr"},
-            {"string": "listAbbr"},
-            {"string": "cellInfoAbbr", "args": [ 1, 1]}]],
-        }, {
-          accOrElmOrID: "email",
-          expectedUtterance: [[{"string": "textInputType_email"},
-            {"string": "entry"}, "test@example.com"], ["test@example.com",
-            {"string": "textInputType_email"}, {"string": "entry"}]],
-          expectedBraille: [[{"string": "textInputType_email"},
-            {"string": "entryAbbr"}, "test@example.com"], ["test@example.com",
-            {"string": "textInputType_email"}, {"string": "entryAbbr"}]],
-        }, {
-          accOrElmOrID: "search",
-          expectedUtterance: [[{"string": "textInputType_search"},
-            {"string": "entry"}, "This is a search"], ["This is a search",
-            {"string": "textInputType_search"}, {"string": "entry"}]],
-          expectedBraille: [[{"string": "textInputType_search"},
-            {"string": "entryAbbr"}, "This is a search"], ["This is a search",
-            {"string": "textInputType_search"}, {"string": "entryAbbr"}]],
-        }, {
-          accOrElmOrID: "tel",
-          expectedUtterance: [[{"string": "textInputType_tel"},
-            {"string": "entry"}, "555-5555"], ["555-5555",
-            {"string": "textInputType_tel"}, {"string": "entry"}]],
-          expectedBraille: [[{"string": "textInputType_tel"},
-            {"string": "entryAbbr"}, "555-5555"], ["555-5555",
-            {"string": "textInputType_tel"}, {"string": "entryAbbr"}]],
-        }, {
-          accOrElmOrID: "url",
-          expectedUtterance: [[{"string": "textInputType_url"},
-            {"string": "entry"}, "http://example.com"], ["http://example.com",
-            {"string": "textInputType_url"}, {"string": "entry"}]],
-          expectedBraille: [[{"string": "textInputType_url"},
-            {"string": "entryAbbr"}, "http://example.com"],
-            ["http://example.com", {"string": "textInputType_url"},
-            {"string": "entryAbbr"}]],
-        }, {
-          accOrElmOrID: "textInput",
-          expectedUtterance: [[{"string": "entry"}, "This is text."],
-                              ["This is text.", {"string": "entry"}]],
-          expectedBraille: [[{"string": "entryAbbr"}, "This is text."],
-                            ["This is text.", {"string": "entryAbbr"}]],
-        }, {
-          // Test pivot to list from li_one.
-          accOrElmOrID: "list",
-          oldAccOrElmOrID: "li_one",
-          expectedUtterance: [[{"string": "list"},
-            {"string": "listItemsCount", "count": 1}, {"string": "listStart"},
-            "1.", "list one"], ["1.", "list one", {"string": "listStart"},
-            {"string": "list"}, {"string": "listItemsCount", "count": 1}],
-          ],
-          expectedBraille: [[{"string": "listAbbr"}, "list one"],
-                            ["list one", {"string": "listAbbr"}]],
-        }, {
-          // Test pivot to "apples" link from the table cell.
-          accOrElmOrID: "apples",
-          oldAccOrElmOrID: "cell",
-          expectedUtterance: [[{"string": "list"},
-            {"string": "listItemsCount", "count": 4}, {"string": "listStart"},
-            {"string": "link"}, "Apples"], ["Apples", {"string": "link"},
-            {"string": "listStart"}, {"string": "list"},
-            {"string": "listItemsCount", "count": 4}],
-          ],
-          expectedBraille: [["*", {"string": "linkAbbr"}, "Apples"],
-                            ["*", "Apples", {"string": "linkAbbr"}]],
-        }, {
-          // Test pivot to "bananas" link from "apples" link.
-          accOrElmOrID: "bananas",
-          oldAccOrElmOrID: "apples",
-          expectedUtterance: [[{"string": "link"}, "Bananas"],
-                              ["Bananas", {"string": "link"}]],
-          expectedBraille: [["*", {"string": "linkAbbr"}, "Bananas"],
-                            ["*", "Bananas", {"string": "linkAbbr"}]],
-        }, {
-          // test unavailable state utterance
-          accOrElmOrID: "unavailableButton",
-          expectedUtterance: [[{"string": "stateUnavailable"},
-            {"string": "pushbutton"}, "I am unavailable"], ["I am unavailable",
-            {"string": "stateUnavailable"}, {"string": "pushbutton"}]],
-          expectedBraille: [[{"string": "pushbuttonAbbr"}, "I am unavailable"],
-                            ["I am unavailable", {"string": "pushbuttonAbbr"}]],
-        }, {
-          // test expanded state utterance
-          accOrElmOrID: "expandedButton",
-          expectedUtterance: [[{"string": "stateExpanded"},
-            {"string": "pushbutton"}, "I am expanded"], ["I am expanded",
-            {"string": "stateExpanded"}, {"string": "pushbutton"}]],
-          expectedBraille: [[{"string": "pushbuttonAbbr"}, "I am expanded"],
-                            ["I am expanded", {"string": "pushbuttonAbbr"}]],
-        }, {
-          // test collapsed state utterance
-          accOrElmOrID: "collapsedButton",
-          expectedUtterance: [[{"string": "stateCollapsed"},
-            {"string": "pushbutton"}, "I am collapsed"], ["I am collapsed",
-            {"string": "stateCollapsed"}, {"string": "pushbutton"}]],
-          expectedBraille: [[{"string": "pushbuttonAbbr"}, "I am collapsed"],
-                            ["I am collapsed", {"string": "pushbuttonAbbr"}]],
-        }, {
-          // test required state utterance
-          accOrElmOrID: "requiredInput",
-          expectedUtterance: [[{"string": "stateRequired"}, {"string": "entry"},
-            "I am required"], ["I am required", {"string": "stateRequired"},
-            {"string": "entry"}]],
-          expectedBraille: [[{"string": "entryAbbr"}, "I am required"],
-                            ["I am required", {"string": "entryAbbr"}]],
-        }, {
-          // test unavailable state utterance on inputs
-          accOrElmOrID: "readonlyInput",
-          expectedUtterance: [[{"string": "stateReadonly"}, {"string": "entry"},
-            "No edits"], ["No edits", {"string": "stateReadonly"},
-            {"string": "entry"}]],
-          expectedBraille: [[{"string": "entryAbbr"}, "No edits"],
-                            ["No edits", {"string": "entryAbbr"}]],
-        }, {
-          // test unavailable state utterance on textareas
-          accOrElmOrID: "readonlyTextarea",
-          expectedUtterance: [[{"string": "stateReadonly"}, {"string": "textarea"},
-            "No editing"], ["No editing", {"string": "stateReadonly"},
-            {"string": "textarea"}]],
-          expectedBraille: [[{"string": "textareaAbbr"}, "No editing"],
-                            ["No editing", {"string": "textareaAbbr"}]],
-        }, {
-          // test has popup state utterance
-          accOrElmOrID: "hasPopupButton",
-          expectedUtterance: [[{"string": "stateHasPopup"},
-            {"string": "buttonmenu"}, "I have a popup"], ["I have a popup",
-            {"string": "stateHasPopup"}, {"string": "buttonmenu"}]],
-          expectedBraille: [[{"string": "buttonmenuAbbr"}, "I have a popup"],
-                            ["I have a popup", {"string": "buttonmenuAbbr"}]],
-        }, {
-          // Test selected tab
-          accOrElmOrID: "tab1",
-          expectedUtterance: [[{"string": "pagetablist"}, {"string": "pagetab"},
-            {"string": "objItemOfN", "args": [1, 2]}, "Account"], ["Account",
-            {"string": "pagetab"}, {"string": "objItemOfN", "args": [1, 2]},
-            {"string": "pagetablist"}],
-          ],
-          expectedBraille: [[{"string": "pagetabAbbr"},
-            {"string": "objItemOfN", "args": [1, 2]}, "Account"], ["Account",
-            {"string": "pagetabAbbr"},
-            {"string": "objItemOfN", "args": [1, 2]}]],
-        }, {
-          // Test unselected tab
-          accOrElmOrID: "tab2",
-          expectedUtterance: [[{"string": "pagetablist"}, {"string": "pagetab"},
-            {"string": "objItemOfN", "args": [2, 2]}, "Advanced"], ["Advanced",
-            {"string": "pagetab"}, {"string": "objItemOfN", "args": [2, 2]},
-            {"string": "pagetablist"}]],
-          expectedBraille: [[{"string": "pagetabAbbr"},
-            {"string": "objItemOfN", "args": [2, 2]}, "Advanced"], ["Advanced",
-            {"string": "pagetabAbbr"},
-            {"string": "objItemOfN", "args": [2, 2]}]],
-        }, {
-          // Landing on this label should mimic landing on the checkbox.
-          accOrElmOrID: "label1",
-          expectedUtterance: [[{"string": "checkbutton"}, "Orange"], ["Orange",
-            {"string": "checkbutton"}]],
-          expectedBraille: [["Orange"], ["Orange"]],
-        }, {
-          // Here we get a top-level view of the form.
-          accOrElmOrID: "form1",
-          expectedUtterance: [[{"string": "label"}, {"string": "checkbutton"}, "Orange",
-            "Orange", {"string": "checkbutton"}, "Blue", {"string": "label"}, "Blue"],
-            ["Orange", {"string": "checkbutton"}, "Orange", {"string": "label"}, "Blue",
-            {"string": "checkbutton"}, "Blue", {"string": "label"}]],
-          expectedBraille: [[{"string": "labelAbbr"}, "Orange", "Orange", "Blue",
-            {"string": "labelAbbr"}, "Blue"], ["Orange", "Orange",
-            {"string": "labelAbbr"}, "Blue", "Blue", {"string": "labelAbbr"}]],
-        }, {
-          // This is a non-nesting label.
-          accOrElmOrID: "label2",
-          expectedUtterance: [[{"string": "label"}, "Blue"],
-                              ["Blue", {"string": "label"}]],
-          expectedBraille: [[{"string": "labelAbbr"}, "Blue"],
-                            ["Blue", {"string": "labelAbbr"}]],
-        }, {
-          // This is a distinct control.
-          accOrElmOrID: "input2",
-          expectedUtterance: [[ {"string": "checkbutton"}, "Blue"],
-                              ["Blue", {"string": "checkbutton"}]],
-          expectedBraille: [["Blue"], ["Blue"]],
-        }, {
-          // This is a nested control.
-          accOrElmOrID: "input1",
-          expectedUtterance: [[ {"string": "checkbutton"}, "Orange"], ["Orange",
-            {"string": "checkbutton"}]],
-          expectedBraille: [["Orange"], ["Orange"]],
-        }, {
-          // Landing on this label should mimic landing on the entry.
-          accOrElmOrID: "label3",
-          expectedUtterance: [[{"string": "entry"}, "Joe", "First name:"],
-                             ["First name:", "Joe", {"string": "entry"}]],
-          expectedBraille: [[{"string": "entryAbbr"}, "Joe", "First name:"],
-                            ["First name:", "Joe", {"string": "entryAbbr"}]],
-        }, {
-          // This is a nested control with a value.
-          accOrElmOrID: "input3",
-          expectedUtterance: [[{"string": "entry"}, "Joe", "First name:"],
-                              ["First name:", "Joe", {"string": "entry"}]],
-          expectedBraille: [[{"string": "entryAbbr"}, "Joe", "First name:"],
-                            ["First name:", "Joe", {"string": "entryAbbr"}]],
-        }, {
-          // This is a nested control with a value.
-          accOrElmOrID: "input4",
-          expectedUtterance: [[{"string": "slider"}, "3", "Points:"],
-                              ["Points:", "3", {"string": "slider"}]],
-          expectedBraille: [[{"string": "sliderAbbr"}, "3", "Points:"],
-                            ["Points:", "3", {"string": "sliderAbbr"}]],
-        }, {
-          accOrElmOrID: "password",
-          expectedUtterance: [[{"string": "passwordtext"}, "Secret Password"],
-                              ["Secret Password", {"string": "passwordtext"}]],
-          expectedBraille: [[{"string": "passwordtextAbbr"}, "Secret Password"],
-                            ["Secret Password", {"string": "passwordtextAbbr"}]],
-        }, {
-          accOrElmOrID: "input5",
-          expectedUtterance: [[{"string": "checkbutton"}, "Boring label"],
-                              ["Boring label", {"string": "checkbutton"}]],
-          expectedBraille: [["Boring label"], ["Boring label"]],
-        }, {
-          accOrElmOrID: "radio_unselected",
-          expectedUtterance: [[{"string": "radiobutton"}, "any old radio button"],
-                              ["any old radio button", {"string": "radiobutton"}],
-          ],
-          expectedBraille: [["any old radio button"], ["any old radio button"]],
-        }, {
-          accOrElmOrID: "radio_selected",
-          expectedUtterance: [[{"string": "radiobutton"}, "a unique radio button"],
-                              ["a unique radio button", {"string": "radiobutton"}]],
-          expectedBraille: [["a unique radio button"], ["a unique radio button"]],
-        }, {
-          accOrElmOrID: "togglebutton_notpressed",
-          expectedUtterance: [[{"string": "togglebutton"}, "I am not pressed"],
-                              ["I am not pressed", {"string": "togglebutton"}]],
-          expectedBraille: [
-            [{"string": "stateUnpressedAbbr"}, "I am not pressed"],
-            ["I am not pressed", {"string": "stateUnpressedAbbr"}]],
-        }, {
-          accOrElmOrID: "togglebutton_pressed",
-          expectedUtterance: [[{"string": "statePressed"},
-            {"string": "togglebutton"}, "I am pressed!"], ["I am pressed!",
-            {"string": "statePressed"}, {"string": "togglebutton"}]],
-          expectedBraille: [[{"string": "statePressedAbbr"}, "I am pressed!"],
-                            ["I am pressed!", {"string": "statePressedAbbr"}]],
-        }, {
-          accOrElmOrID: "listbox-option",
-          expectedUtterance: [[{"string": "listbox"},
-            {"string": "listboxoption"}, "Search suggestion"],
-            ["Search suggestion", {"string": "listboxoption"},
-            {"string": "listbox"}],
-          ],
-          expectedBraille: [
-            [{"string": "listboxoptionAbbr"}, "Search suggestion"],
-            ["Search suggestion", {"string": "listboxoptionAbbr"}]],
-        }, {
-          accOrElmOrID: "listbox-option2",
-          oldAccOrElmOrID: "listbox-option",
-          expectedUtterance: [[{"string": "listboxoption"}, "555-12345"],
-                              ["555-12345", {"string": "listboxoption"}]],
-          expectedBraille: [[{"string": "listboxoptionAbbr"}, "555-12345"],
-                            ["555-12345", {"string": "listboxoptionAbbr"}]],
-        }, {
-          accOrElmOrID: "columnheader",
-          oldAccOrElmOrID: "grid",
-          expectedUtterance: [[{"string": "columnInfo", "args": [1]},
-            {"string": "rowInfo", "args": [1]}, "Sunday"], ["Sunday",
-            {"string": "columnInfo", "args": [1]},
-            {"string": "rowInfo", "args": [1]}]],
-          expectedBraille: [[{"string": "cellInfoAbbr", "args": [1, 1]},
-            "Sunday"], ["Sunday", {"string": "cellInfoAbbr", "args": [1, 1]}]],
-        }, {
-          accOrElmOrID: "rowheader",
-          oldAccOrElmOrID: "grid",
-          expectedUtterance: [[{"string": "columnInfo", "args": [1]},
-            {"string": "rowInfo", "args": [2]}, "Sunday", "Week 1"], ["Week 1",
-            {"string": "columnInfo", "args": [1]},
-            {"string": "rowInfo", "args": [2]}, "Sunday"]],
-          expectedBraille: [[{"string": "cellInfoAbbr", "args": [1, 2]},
-            "Sunday", "Week 1"], ["Week 1",
-            {"string": "cellInfoAbbr", "args": [1, 2]}, "Sunday"]],
-        }, {
-          accOrElmOrID: "gridcell1",
-          oldAccOrElmOrID: "grid",
-          expectedUtterance: [["3"], ["3"]],
-          expectedBraille: [["3"], ["3"]],
-        }, {
-          accOrElmOrID: "gridcell2",
-          oldAccOrElmOrID: "grid",
-          expectedUtterance: [["4", "7"], ["4", "7"]],
-          expectedBraille: [["4", "7"], ["4", "7"]],
-        }, {
-          accOrElmOrID: "gridcell3",
-          oldAccOrElmOrID: "grid",
-          expectedUtterance: [["5"], ["5"]],
-          expectedBraille: [["5"], ["5"]],
-        }, {
-          accOrElmOrID: "frequency",
-          expectedUtterance: [[{"string": "stateCollapsed"},
-            {"string": "stateHasPopup"}, {"string": "combobox"}, "15 min"], [
-            "15 min", {"string": "stateCollapsed"}, {"string": "stateHasPopup"},
-            {"string": "combobox"}]],
-          expectedBraille: [[{"string": "comboboxAbbr"}, "15 min"], ["15 min",
-            {"string": "comboboxAbbr"}]],
-        }, {
-          accOrElmOrID: "selected-combobox-option",
-          oldAccOrElmOrID: "frequency",
-          expectedUtterance: [[{"string": "comboboxoption"}, "15 min"],
-                              ["15 min", {"string": "comboboxoption"}]],
-          expectedBraille: [[{"string": "comboboxoptionAbbr"}, "15 min"], [
-            "15 min", {"string": "comboboxoptionAbbr"}]],
-        }, {
-          accOrElmOrID: "combobox-option",
-          oldAccOrElmOrID: "frequency",
-          expectedUtterance: [[{"string": "comboboxoption"}, "30 min"], [
-            "30 min", {"string": "comboboxoption"}]],
-          expectedBraille: [[{"string": "comboboxoptionAbbr"}, "30 min"], [
-            "30 min", {"string": "comboboxoptionAbbr"}]],
-        }, {
-          accOrElmOrID: "labelled-combobox",
-          expectedUtterance: [[{"string": "stateCollapsed"},
-            {"string": "stateHasPopup"}, {"string": "combobox"}, "Never",
-            "Intervals"], ["Intervals", "Never", {"string": "stateCollapsed"},
-            {"string": "stateHasPopup"}, {"string": "combobox"}]],
-          expectedBraille: [[{"string": "comboboxAbbr"}, "Never", "Intervals"],
-            ["Intervals", "Never", {"string": "comboboxAbbr"}]],
-        }, {
-          accOrElmOrID: "statusbar-1",
-          expectedUtterance: [["Last sync:", "2 days ago"],
-                              ["Last sync:", "2 days ago"]],
-          expectedBraille: [["Last sync:", "2 days ago"],
-                            ["Last sync:", "2 days ago"]],
-        }, {
-          accOrElmOrID: "statusbar-2",
-          expectedUtterance: [["Last sync: 30min ago"],
-                              ["Last sync: 30min ago"]],
-          expectedBraille: [["Last sync: 30min ago"], ["Last sync: 30min ago"]],
-        }, {
-          accOrElmOrID: "switch-1",
-          expectedUtterance: [[{"string": "switch"}, "Simple switch"],
-                              ["Simple switch", {"string": "switch"}]],
-          expectedBraille: [["Simple switch"], ["Simple switch"]],
-        }, {
-          accOrElmOrID: "switch-2",
-          expectedUtterance: [[{"string": "switch"}, "Another switch"],
-                              ["Another switch", {"string": "switch"}]],
-          expectedBraille: [["Another switch"], ["Another switch"]],
-        }];
-
-        // Test all possible utterance order preference values.
-        function testOutputOrder(aOutputOrder) {
-          return function() {
-            SpecialPowers.pushPrefEnv({
-              "set": [[PREF_UTTERANCE_ORDER, aOutputOrder]],
-            }, function() {
-              tests.forEach(function run(test) {
-                testOutput(test.expectedUtterance[aOutputOrder], test.accOrElmOrID,
-                  test.oldAccOrElmOrID);
-              });
-              AccessFuTest.nextTest();
-            });
-          };
-        }
-
-        AccessFuTest.addFunc(testOutputOrder(0));
-        AccessFuTest.addFunc(testOutputOrder(1));
-        AccessFuTest.waitForExplicitFinish();
-        AccessFuTest.runTests();
-      }
-
-      SimpleTest.waitForExplicitFinish();
-      addA11yLoadEvent(doTest);
-
-    </script>
-  </head>
-  <body>
-    <div id="root">
-      <a target="_blank"
-         href="https://bugzilla.mozilla.org/show_bug.cgi?id=753984"
-         title="[AccessFu] utterance order test">
-         Mozilla Bug 753984</a>
-      <a target="_blank"
-         href="https://bugzilla.mozilla.org/show_bug.cgi?id=758675"
-         title="[AccessFu] Add support for accDescription">
-         Mozilla Bug 758675</a>
-      <a target="_blank"
-         href="https://bugzilla.mozilla.org/show_bug.cgi?id=876475"
-         title="[AccessFu] Make braille output less verbose">
-         Mozilla Bug 876475</a>
-      <a target="_blank"
-         href="https://bugzilla.mozilla.org/show_bug.cgi?id=924284"
-         title="[AccessFu] Output accessible values">
-         Mozilla Bug 924284</a>
-      <a target="_blank"
-         href="https://bugzilla.mozilla.org/show_bug.cgi?id=925845"
-         title="[AccessFu] Unify output tests">
-         Mozilla Bug 925845</a>
-      <p id="display"></p>
-      <div id="content" style="display: none"></div>
-      <pre id="test"></pre>
-      <a id="anchor" href="#test" title="title"></a>
-      <a id="anchor_titleandtext" href="#test" title="goes to the tests">Tests</a>
-      <a id="anchor_duplicatedtitleandtext" href="#test" title="Tests">Tests</a>
-      <a id="anchor_arialabelandtext" href="#test" aria-label="Tests" title="goes to the tests">Tests</a>
-      <textarea id="textarea" cols="80" rows="5">
-        This is the text area text.
-      </textarea>
-      <h1 id="heading" title="Test heading"></h1>
-      <ol id="list">
-        <li id="li_one">list one</li>
-      </ol>
-      <ul id="unorderd_list">
-        <li id="li_two">list two</li>
-      </ul>
-      <dl id="dlist">
-        <dd id="dd_one">
-          dd one
-        </dd>
-      </dl>
-      <table>
-        <caption>Fruits and vegetables</caption>
-        <tr>
-          <td id="cell">
-            <ul style="list-style-type: none;">
-              <li><a id="apples" href="#">Apples</a></li>
-              <li><a id="bananas" href="#">Bananas</a></li>
-              <li><a href="#">Peaches</a></li>
-              <li>
-                <a href="#">
-                  Plums
-                </a>
-              </li>
-            </ul>
-          </td>
-        </tr>
-      </table>
-      <button id="unavailableButton" disabled>I am unavailable</button>
-      <button id="expandedButton" aria-expanded="true">I am expanded</button>
-      <button id="collapsedButton" aria-expanded="false">I am collapsed</button>
-      <input id="requiredInput" required placeholder="I am required" />
-      <input id="readonlyInput" readonly value="No edits" />
-      <textarea id="readonlyTextarea" readonly>No editing</textarea>
-      <button id="hasPopupButton" aria-haspopup="true">I have a popup</button>
-      <div role="tablist">
-        <a id="tab1" href="#" role="tab" aria-selected="true">Account</a>
-        <a id="tab2" href="#" role="tab" aria-selected="false">Advanced</a>
-      </div>
-      <form id="form1">
-        <label id="label1"><input id="input1" type="checkbox">Orange</label>
-        <input id="input2" type="checkbox"><label id="label2" for="input2">Blue</label>
-      </form>
-      <label id="label3">First name: <input id="input3" value="Joe"></label>
-      <label id="label4">Points:
-        <input id="input4" type="range" name="points" min="1" max="10" value="3">
-      </label>
-      <label for="input5">Boring label</label><input id="input5" type="checkbox" checked></input>
-      <label for="password">Secret Password</label><input id="password" type="password"></input>
-      <label for="radio_unselected">any old radio button</label><input id="radio_unselected" type="radio"></input>
-      <label for="radio_selected">a unique radio button</label><input id="radio_selected" type="radio" checked></input>
-      <input id="email" type="email" value="test@example.com" />
-      <input id="search" type="search" value="This is a search" />
-      <input id="tel" type="tel" value="555-5555" />
-      <input id="url" type="url" value="http://example.com" />
-      <input id="textInput" type="text" value="This is text." />
-      <label>Points: <input id="range" type="range" name="points" min="1" max="10" value="3"></label>
-      <div id="togglebutton_notpressed" aria-pressed="false" role="button" tabindex="-1">I am not pressed</div>
-      <div id="togglebutton_pressed" aria-pressed="true" role="button" tabindex="-1">I am pressed!</div>
-      <ul role="listbox" style="list-style-type: none;">
-        <li role="option" id="listbox-option">Search suggestion</li>
-        <li role="option" id="listbox-option2">
-          <label aria-hidden="true">
-            <input type="checkbox" />
-          </label>
-          555-12345
-        </li>
-      </ul>
-      <section id="grid" role="grid">
-        <ol role="row">
-          <li role="presentation"></li>
-          <li id="columnheader" role="columnheader" aria-label="Sunday">S</li>
-          <li role="columnheader">M</li>
-        </ol>
-        <ol role="row">
-          <li id="rowheader" role="rowheader" aria-label="Week 1">1</li>
-          <li id="gridcell1" role="gridcell"><span>3</span><div></div></li>
-          <li id="gridcell2" role="gridcell"><span>4</span><div>7</div></li>
-        </ol>
-        <ol role="row">
-          <li role="rowheader">2</li>
-          <li id="gridcell3" aria-selected="true" role="gridcell">5</li>
-          <li role="gridcell">6</li>
-        </ol>
-      </section>
-      <select id="frequency">
-        <option id="selected-combobox-option" value="15">15 min</option>
-        <option id="combobox-option" value="30">30 min</option>
-        <option value="null">Manual</option>
-      </select>
-      <select id="labelled-combobox" aria-label="Intervals">
-        <option value="15">Every 15 min</option>
-        <option value="30">Every 30 min</option>
-        <option value="null" selected>Never</option>
-      </select>
-      <div id="statusbar-1" role="status">Last sync:<span>2 days ago</span></div>
-      <div aria-label="Last sync: 30min ago" id="statusbar-2" role="status">I should be ignored</div>
-      <span id="switch-1" role="switch" aria-label="Simple switch" aria-checked="true"></span>
-      <span id="switch-2" role="switch" aria-label="Another switch" aria-checked="false"></span>
-    </div>
-  </body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/test_output_mathml.html
+++ /dev/null
@@ -1,310 +0,0 @@
-<html>
-<head>
-  <title>[AccessFu] MathML Accessibility Support</title>
-
-  <link rel="stylesheet" type="text/css"
-        href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-  <script type="application/javascript"
-          src="../common.js"></script>
-  <script type="application/javascript"
-          src="output.js"></script>
-  <script type="application/javascript"
-          src="jsatcommon.js"></script>
-  <script type="application/javascript">
-
-    function doTest() {
-      // Test the following accOrElmOrID.
-      var tests = [{
-          accOrElmOrID: "math-1",
-          expectedUtterance: [
-            [{"string": "open-fence"}, "(", "x", ",", "y", {"string": "close-fence"}, ")"],
-            ["(", {"string": "open-fence"}, "x", ",", "y", ")", {"string": "close-fence"}],
-          ],
-          expectedBraille: [
-            [{"string": "open-fenceAbbr"}, "(", "x", ",", "y", {"string": "close-fenceAbbr"}, ")"],
-            ["(", {"string": "open-fenceAbbr"}, "x", ",", "y", ")", {"string": "close-fenceAbbr"}],
-          ],
-        }, {
-          accOrElmOrID: "mfrac-1",
-          expectedUtterance: [
-            [{"string": "mathmlfraction"}, {"string": "numerator"}, "a", {"string": "denominator"}, "b"],
-            ["a", {"string": "numerator"}, "b", {"string": "denominator"}, {"string": "mathmlfraction"}],
-          ],
-          expectedBraille: [
-            [{"string": "mathmlfractionAbbr"}, {"string": "numeratorAbbr"}, "a", {"string": "denominatorAbbr"}, "b"],
-            ["a", {"string": "numeratorAbbr"}, "b", {"string": "denominatorAbbr"}, {"string": "mathmlfractionAbbr"}],
-          ],
-        }, {
-          accOrElmOrID: "mfrac-2",
-          expectedUtterance: [
-            [{"string": "mathmlfractionwithoutbar"}, {"string": "numerator"}, "a", {"string": "denominator"}, "b"],
-            ["a", {"string": "numerator"}, "b", {"string": "denominator"}, {"string": "mathmlfractionwithoutbar"}],
-          ],
-          expectedBraille: [
-            [{"string": "mathmlfractionwithoutbarAbbr"}, {"string": "numeratorAbbr"}, "a", {"string": "denominatorAbbr"}, "b"],
-            ["a", {"string": "numeratorAbbr"}, "b", {"string": "denominatorAbbr"}, {"string": "mathmlfractionwithoutbarAbbr"}],
-          ],
-        }, {
-          accOrElmOrID: "msub-1",
-          expectedUtterance: [
-            [{"string": "mathmlscripted"}, {"string": "base"}, "a", {"string": "subscript"}, "b"],
-            ["a", {"string": "base"}, "b", {"string": "subscript"}, {"string": "mathmlscripted"}],
-          ],
-          expectedBraille: [
-            [{"string": "mathmlscriptedAbbr"}, {"string": "baseAbbr"}, "a", {"string": "subscriptAbbr"}, "b"],
-            ["a", {"string": "baseAbbr"}, "b", {"string": "subscriptAbbr"}, {"string": "mathmlscriptedAbbr"}],
-          ],
-        }, {
-          accOrElmOrID: "msup-1",
-          expectedUtterance: [
-            [{"string": "mathmlscripted"}, {"string": "base"}, "a", {"string": "superscript"}, "b"],
-            ["a", {"string": "base"}, "b", {"string": "superscript"}, {"string": "mathmlscripted"}],
-          ],
-          expectedBraille: [
-            [{"string": "mathmlscriptedAbbr"}, {"string": "baseAbbr"}, "a", {"string": "superscriptAbbr"}, "b"],
-            ["a", {"string": "baseAbbr"}, "b", {"string": "superscriptAbbr"}, {"string": "mathmlscriptedAbbr"}],
-          ],
-        }, {
-          accOrElmOrID: "msubsup-1",
-          expectedUtterance: [
-            [{"string": "mathmlscripted"}, {"string": "base"}, "a", {"string": "subscript"}, "b", {"string": "superscript"}, "c"],
-            ["a", {"string": "base"}, "b", {"string": "subscript"}, "c", {"string": "superscript"}, {"string": "mathmlscripted"}],
-          ],
-          expectedBraille: [
-            [{"string": "mathmlscriptedAbbr"}, {"string": "baseAbbr"}, "a", {"string": "subscriptAbbr"}, "b", {"string": "superscriptAbbr"}, "c"],
-            ["a", {"string": "baseAbbr"}, "b", {"string": "subscriptAbbr"}, "c", {"string": "superscriptAbbr"}, {"string": "mathmlscriptedAbbr"}],
-          ],
-        }, {
-          accOrElmOrID: "mmultiscripts-1",
-          expectedUtterance: [
-            [{"string": "mathmlscripted"}, {"string": "base"}, "a", {"string": "subscript"}, "b", {"string": "superscript"}, "c", {"string": "superscript"}, "d", {"string": "presubscript"}, "e", {"string": "presubscript"}, "f", {"string": "presuperscript"}, "g"],
-            ["a", {"string": "base"}, "b", {"string": "subscript"}, "c", {"string": "superscript"}, "d", {"string": "superscript"}, "e", {"string": "presubscript"}, "f", {"string": "presubscript"}, "g", {"string": "presuperscript"}, {"string": "mathmlscripted"}],
-          ],
-          expectedBraille: [
-            [{"string": "mathmlscriptedAbbr"}, {"string": "baseAbbr"}, "a", {"string": "subscriptAbbr"}, "b", {"string": "superscriptAbbr"}, "c", {"string": "superscriptAbbr"}, "d", {"string": "presubscriptAbbr"}, "e", {"string": "presubscriptAbbr"}, "f", {"string": "presuperscriptAbbr"}, "g"],
-            ["a", {"string": "baseAbbr"}, "b", {"string": "subscriptAbbr"}, "c", {"string": "superscriptAbbr"}, "d", {"string": "superscriptAbbr"}, "e", {"string": "presubscriptAbbr"}, "f", {"string": "presubscriptAbbr"}, "g", {"string": "presuperscriptAbbr"}, {"string": "mathmlscriptedAbbr"}],
-          ],
-        }, {
-          accOrElmOrID: "munder-1",
-          expectedUtterance: [
-            [{"string": "mathmlscripted"}, {"string": "base"}, "a", {"string": "underscript"}, "b"],
-            ["a", {"string": "base"}, "b", {"string": "underscript"}, {"string": "mathmlscripted"}],
-          ],
-          expectedBraille: [
-            [{"string": "mathmlscriptedAbbr"}, {"string": "baseAbbr"}, "a", {"string": "underscriptAbbr"}, "b"],
-            ["a", {"string": "baseAbbr"}, "b", {"string": "underscriptAbbr"}, {"string": "mathmlscriptedAbbr"}],
-          ],
-        }, {
-          accOrElmOrID: "mover-1",
-          expectedUtterance: [
-            [{"string": "mathmlscripted"}, {"string": "base"}, "a", {"string": "overscript"}, "b"],
-            ["a", {"string": "base"}, "b", {"string": "overscript"}, {"string": "mathmlscripted"}],
-          ],
-          expectedBraille: [
-            [{"string": "mathmlscriptedAbbr"}, {"string": "baseAbbr"}, "a", {"string": "overscriptAbbr"}, "b"],
-            ["a", {"string": "baseAbbr"}, "b", {"string": "overscriptAbbr"}, {"string": "mathmlscriptedAbbr"}],
-          ],
-        }, {
-          accOrElmOrID: "munderover-1",
-          expectedUtterance: [
-            [{"string": "mathmlscripted"}, {"string": "base"}, "a", {"string": "underscript"}, "b", {"string": "overscript"}, "c"],
-            ["a", {"string": "base"}, "b", {"string": "underscript"}, "c", {"string": "overscript"}, {"string": "mathmlscripted"}],
-          ],
-          expectedBraille: [
-            [{"string": "mathmlscriptedAbbr"}, {"string": "baseAbbr"}, "a", {"string": "underscriptAbbr"}, "b", {"string": "overscriptAbbr"}, "c"],
-            ["a", {"string": "baseAbbr"}, "b", {"string": "underscriptAbbr"}, "c", {"string": "overscriptAbbr"}, {"string": "mathmlscriptedAbbr"}],
-          ],
-        }, {
-          accOrElmOrID: "mroot-1",
-          expectedUtterance: [
-            [{"string": "mathmlroot"}, {"string": "base"}, "a", {"string": "root-index"}, "b"],
-            ["a", {"string": "base"}, "b", {"string": "root-index"}, {"string": "mathmlroot"}],
-          ],
-          expectedBraille: [
-            [{"string": "mathmlrootAbbr"}, {"string": "baseAbbr"}, "a", {"string": "root-indexAbbr"}, "b"],
-            ["a", {"string": "baseAbbr"}, "b", {"string": "root-indexAbbr"}, {"string": "mathmlrootAbbr"}],
-          ],
-        }, {
-          accOrElmOrID: "mtable-1",
-          expectedUtterance: [
-            [{"string": "mathmltable"}, {"string": "tblColumnInfo", "count": 3}, {"string": "tblRowInfo", "count": 2}, {"string": "columnInfo", "args": [1]}, {"string": "rowInfo", "args": [1]}, "a", {"string": "columnInfo", "args": [2]}, {"string": "rowInfo", "args": [1]}, "b", {"string": "columnInfo", "args": [3]}, {"string": "rowInfo", "args": [1]}, "c", {"string": "columnInfo", "args": [1]}, {"string": "rowInfo", "args": [2]}, "d", {"string": "columnInfo", "args": [2]}, {"string": "rowInfo", "args": [2]}, "e", {"string": "columnInfo", "args": [3]}, {"string": "rowInfo", "args": [2]}, "f"],
-            ["a", {"string": "columnInfo", "args": [1]}, {"string": "rowInfo", "args": [1]}, "b", {"string": "columnInfo", "args": [2]}, {"string": "rowInfo", "args": [1]}, "c", {"string": "columnInfo", "args": [3]}, {"string": "rowInfo", "args": [1]}, "d", {"string": "columnInfo", "args": [1]}, {"string": "rowInfo", "args": [2]}, "e", {"string": "columnInfo", "args": [2]}, {"string": "rowInfo", "args": [2]}, "f", {"string": "columnInfo", "args": [3]}, {"string": "rowInfo", "args": [2]}, {"string": "mathmltable"}, {"string": "tblColumnInfo", "count": 3}, {"string": "tblRowInfo", "count": 2}],
-          ],
-          expectedBraille: [
-            [{"string": "mathmltableAbbr"}, {"string": "tblColumnInfoAbbr", "count": 3}, {"string": "tblRowInfoAbbr", "count": 2}, {"string": "cellInfoAbbr", "args": [1, 1]}, "a", {"string": "cellInfoAbbr", "args": [2, 1]}, "b", {"string": "cellInfoAbbr", "args": [3, 1]}, "c", {"string": "cellInfoAbbr", "args": [1, 2]}, "d", {"string": "cellInfoAbbr", "args": [2, 2]}, "e", {"string": "cellInfoAbbr", "args": [3, 2]}, "f"],
-            ["a", {"string": "cellInfoAbbr", "args": [1, 1]}, "b", {"string": "cellInfoAbbr", "args": [2, 1]}, "c", {"string": "cellInfoAbbr", "args": [3, 1]}, "d", {"string": "cellInfoAbbr", "args": [1, 2]}, "e", {"string": "cellInfoAbbr", "args": [2, 2]}, "f", {"string": "cellInfoAbbr", "args": [3, 2]}, {"string": "mathmltableAbbr"}, {"string": "tblColumnInfoAbbr", "count": 3}, {"string": "tblRowInfoAbbr", "count": 2}],
-          ],
-      }, {
-          accOrElmOrID: "menclose-1",
-          expectedUtterance: [
-            [{"string": "mathmlenclosed"}, {"string": "notation-longdiv"}, "a"],
-            ["a", {"string": "notation-longdiv"}, {"string": "mathmlenclosed"}],
-          ],
-          expectedBraille: [
-            [{"string": "mathmlenclosedAbbr"}, {"string": "notation-longdivAbbr"}, "a"],
-            ["a", {"string": "notation-longdivAbbr"}, {"string": "mathmlenclosedAbbr"}],
-          ],
-        }, {
-          accOrElmOrID: "menclose-2",
-          expectedUtterance: [
-            [{"string": "mathmlenclosed"}, {"string": "notation-circle"}, "a"],
-            ["a", {"string": "notation-circle"}, {"string": "mathmlenclosed"}],
-          ],
-          expectedBraille: [
-            [{"string": "mathmlenclosedAbbr"}, {"string": "notation-circleAbbr"}, "a"],
-            ["a", {"string": "notation-circleAbbr"}, {"string": "mathmlenclosedAbbr"}],
-          ],
-        }, {
-          accOrElmOrID: "menclose-3",
-          expectedUtterance: [
-            [{"string": "mathmlenclosed"}, {"string": "notation-left"}, {"string": "notation-top"}, {"string": "notation-bottom"}, "a"],
-            ["a", {"string": "notation-left"}, {"string": "notation-top"}, {"string": "notation-bottom"}, {"string": "mathmlenclosed"}],
-          ],
-          expectedBraille: [
-            [{"string": "mathmlenclosedAbbr"}, {"string": "notation-leftAbbr"}, {"string": "notation-topAbbr"}, {"string": "notation-bottomAbbr"}, "a"],
-            ["a", {"string": "notation-leftAbbr"}, {"string": "notation-topAbbr"}, {"string": "notation-bottomAbbr"}, {"string": "mathmlenclosedAbbr"}],
-          ],
-        }];
-
-      // Test all possible utterance order preference values.
-      function testOutputOrder(aOutputOrder) {
-        return function() {
-          SpecialPowers.pushPrefEnv({
-            "set": [[PREF_UTTERANCE_ORDER, aOutputOrder]],
-          }, function() {
-            tests.forEach(function run(test) {
-              testOutput(test.expectedUtterance[aOutputOrder], test.accOrElmOrID,
-                test.oldAccOrElmOrID);
-            });
-            AccessFuTest.nextTest();
-          });
-        };
-      }
-
-      AccessFuTest.addFunc(testOutputOrder(0));
-      AccessFuTest.addFunc(testOutputOrder(1));
-      AccessFuTest.waitForExplicitFinish();
-      AccessFuTest.runTests();
-    }
-
-    SimpleTest.waitForExplicitFinish();
-    addA11yLoadEvent(doTest);
-  </script>
-</head>
-<body>
-  <div id="root">
-    <a target="_blank"
-       href="https://bugzilla.mozilla.org/show_bug.cgi?id=1163374"
-       title="[AccessFu] MathML Accessibility Support">
-      Mozilla Bug 1163374
-    </a>
-    <p id="display"></p>
-    <div id="content" style="display: none"></div>
-    <pre id="test"></pre>
-
-    <math id="math-1"><mo>(</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></math>
-
-    <math>
-      <mfrac id="mfrac-1">
-        <mi>a</mi>
-        <mi>b</mi>
-      </mfrac>
-    </math>
-
-    <math>
-      <mfrac id="mfrac-2" linethickness="0px">
-        <mi>a</mi>
-        <mi>b</mi>
-      </mfrac>
-    </math>
-
-    <math>
-      <msub id="msub-1">
-        <mi>a</mi>
-        <mi>b</mi>
-      </msub>
-    </math>
-    <math>
-      <msup id="msup-1">
-        <mi>a</mi>
-        <mi>b</mi>
-      </msup>
-    </math>
-    <math>
-      <msubsup id="msubsup-1">
-        <mi>a</mi>
-        <mi>b</mi>
-        <mi>c</mi>
-      </msubsup>
-    </math>
-    <math>
-      <mmultiscripts id="mmultiscripts-1">
-        <mi>a</mi>
-        <mi>b</mi>
-        <mi>c</mi>
-        <none/>
-        <mi>d</mi>
-        <mprescripts/>
-        <mi>e</mi>
-        <none/>
-        <mi>f</mi>
-        <mi>g</mi>
-      </mmultiscripts>
-    </math>
-
-    <math>
-      <munder id="munder-1">
-        <mi>a</mi>
-        <mi>b</mi>
-      </munder>
-    </math>
-    <math>
-      <mover id="mover-1">
-        <mi>a</mi>
-        <mi>b</mi>
-      </mover>
-    </math>
-    <math>
-      <munderover id="munderover-1">
-        <mi>a</mi>
-        <mi>b</mi>
-        <mi>c</mi>
-      </munderover>
-    </math>
-
-    <math>
-      <mroot id="mroot-1">
-        <mi>a</mi>
-        <mi>b</mi>
-      </mroot>
-    </math>
-
-    <math>
-      <mtable id="mtable-1">
-        <mtr>
-          <mtd><mi>a</mi></mtd>
-          <mtd><mi>b</mi></mtd>
-          <mtd><mi>c</mi></mtd>
-        </mtr>
-        <mtr>
-          <mtd><mi>d</mi></mtd>
-          <mtd><mi>e</mi></mtd>
-          <mtd><mi>f</mi></mtd>
-        </mtr>
-      </mtable>
-    </math>
-
-    <math>
-      <menclose id="menclose-1"><mi>a</mi></menclose>
-    </math>
-    <math>
-      <menclose id="menclose-2" notation="circle"><mi>a</mi></menclose>
-    </math>
-    <math>
-      <menclose id="menclose-3" notation="left top bottom"><mi>a</mi></menclose>
-    </math>
-
-  </div>
-</body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/test_tables.html
+++ /dev/null
@@ -1,576 +0,0 @@
-<html>
-<head>
-  <title>[AccessFu] Improve reading of table semantics</title>
-
-  <link rel="stylesheet" type="text/css"
-        href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-  <script type="application/javascript"
-          src="../common.js"></script>
-  <script type="application/javascript"
-          src="output.js"></script>
-  <script type="application/javascript"
-          src="jsatcommon.js"></script>
-  <script type="application/javascript">
-
-    function doTest() {
-      // Test the following accOrElmOrID.
-      var tests = [{
-        accOrElmOrID: "table1",
-        expectedUtterance: [[
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 2},
-          {"string": "tblRowInfo", "count": 2},
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}, "col1",
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [1]}, "col2",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]}, "col1", "cell1",
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [2]}, "col2", "cell2"], ["col1",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}, "col2",
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [1]}, "cell1",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]}, "col1", "cell2",
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [2]}, "col2", {"string": "table"},
-          {"string": "tblColumnInfo", "count": 2},
-          {"string": "tblRowInfo", "count": 2}]],
-        expectedBraille: [[
-          {"string": "tableAbbr"},
-          {"string": "tblColumnInfoAbbr", "count": 2},
-          {"string": "tblRowInfoAbbr", "count": 2},
-          {"string": "cellInfoAbbr", "args": [1, 1]}, "col1",
-          {"string": "cellInfoAbbr", "args": [2, 1]}, "col2",
-          {"string": "cellInfoAbbr", "args": [1, 2]}, "col1", "cell1",
-          {"string": "cellInfoAbbr", "args": [2, 2]}, "col2", "cell2"], ["col1",
-          {"string": "cellInfoAbbr", "args": [1, 1]}, "col2",
-          {"string": "cellInfoAbbr", "args": [2, 1]}, "cell1",
-          {"string": "cellInfoAbbr", "args": [1, 2]}, "col1", "cell2",
-          {"string": "cellInfoAbbr", "args": [2, 2]}, "col2",
-          {"string": "tableAbbr"},
-          {"string": "tblColumnInfoAbbr", "count": 2},
-          {"string": "tblRowInfoAbbr", "count": 2}]],
-      }, {
-        accOrElmOrID: "table2",
-        expectedUtterance: [[
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 2},
-          {"string": "tblRowInfo", "count": 2},
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}, "col1", "cell1",
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [1]}, "col2",
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 1},
-          {"string": "tblRowInfo", "count": 2},
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}, "colheader",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]}, "colheader", "bla",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]}, "col1",
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [2]}, "col2"], ["cell1",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}, "col1", "colheader",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}, "bla",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]}, "colheader",
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 1},
-          {"string": "tblRowInfo", "count": 2},
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [1]}, "col2", "col1",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]}, "col2",
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [2]}, {"string": "table"},
-          {"string": "tblColumnInfo", "count": 2},
-          {"string": "tblRowInfo", "count": 2}]],
-        expectedBraille: [[{"string": "tableAbbr"},
-          {"string": "tblColumnInfoAbbr", "count": 2},
-          {"string": "tblRowInfoAbbr", "count": 2},
-          {"string": "cellInfoAbbr", "args": [1, 1]}, "col1", "cell1",
-          {"string": "cellInfoAbbr", "args": [2, 1]}, "col2",
-          {"string": "tableAbbr"},
-          {"string": "tblColumnInfoAbbr", "count": 1},
-          {"string": "tblRowInfoAbbr", "count": 2},
-          {"string": "cellInfoAbbr", "args": [1, 1]}, "colheader",
-          {"string": "cellInfoAbbr", "args": [1, 2]}, "colheader", "bla",
-          {"string": "cellInfoAbbr", "args": [1, 2]}, "col1",
-          {"string": "cellInfoAbbr", "args": [2, 2]}, "col2"], ["cell1",
-          {"string": "cellInfoAbbr", "args": [1, 1]}, "col1", "colheader",
-          {"string": "cellInfoAbbr", "args": [1, 1]}, "bla",
-          {"string": "cellInfoAbbr", "args": [1, 2]}, "colheader",
-          {"string": "tableAbbr"},
-          {"string": "tblColumnInfoAbbr", "count": 1},
-          {"string": "tblRowInfoAbbr", "count": 2},
-          {"string": "cellInfoAbbr", "args": [2, 1]}, "col2", "col1",
-          {"string": "cellInfoAbbr", "args": [1, 2]}, "col2",
-          {"string": "cellInfoAbbr", "args": [2, 2]},
-          {"string": "tableAbbr"},
-          {"string": "tblColumnInfoAbbr", "count": 2},
-          {"string": "tblRowInfoAbbr", "count": 2}]],
-      }, {
-        accOrElmOrID: "table3",
-        expectedUtterance: [[
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 2},
-          {"string": "tblRowInfo", "count": 2},
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [1]}, "col2",
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 1},
-          {"string": "tblRowInfo", "count": 2},
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}, "colheader",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]}, "colheader", "bla"], ["colheader",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}, "bla",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]}, "colheader",
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 1},
-          {"string": "tblRowInfo", "count": 2},
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [1]}, "col2",
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 2},
-          {"string": "tblRowInfo", "count": 2}]],
-        expectedBraille: [[
-          {"string": "tableAbbr"},
-          {"string": "tblColumnInfoAbbr", "count": 1},
-          {"string": "tblRowInfoAbbr", "count": 2},
-          {"string": "cellInfoAbbr", "args": [1, 1]}, "colheader",
-          {"string": "cellInfoAbbr", "args": [1, 2]}, "colheader", "bla"],
-          ["colheader",
-          {"string": "cellInfoAbbr", "args": [1, 1]}, "bla",
-          {"string": "cellInfoAbbr", "args": [1, 2]}, "colheader",
-          {"string": "tableAbbr"},
-          {"string": "tblColumnInfoAbbr", "count": 1},
-          {"string": "tblRowInfoAbbr", "count": 2}]],
-      }, {
-        accOrElmOrID: "table4",
-        expectedUtterance: [[
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 4},
-          {"string": "tblRowInfo", "count": 3},
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}, "col1",
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [1]}, "col2",
-          {"string": "columnInfo", "args": [3]},
-          {"string": "rowInfo", "args": [1]}, "col3",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]},
-          {"string": "spansColumns", "args": [2]}, "col1", "row1",
-          {"string": "columnInfo", "args": [3]},
-          {"string": "rowInfo", "args": [2]}, "col3", "row1", "cell1",
-          {"string": "columnInfo", "args": [4]},
-          {"string": "rowInfo", "args": [2]},
-          {"string": "spansRows", "args": [2]}, "row1", "cell2",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [3]}, "col1", "row2",
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [3]}, "col2", "row2", "cell3",
-          {"string": "columnInfo", "args": [3]},
-          {"string": "rowInfo", "args": [3]}, "col3", "row2", "cell4"], ["col1",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}, "col2",
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [1]}, "col3",
-          {"string": "columnInfo", "args": [3]},
-          {"string": "rowInfo", "args": [1]}, "row1",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]},
-          {"string": "spansColumns", "args": [2]}, "col1", "cell1",
-          {"string": "columnInfo", "args": [3]},
-          {"string": "rowInfo", "args": [2]}, "col3", "row1", "cell2",
-          {"string": "columnInfo", "args": [4]},
-          {"string": "rowInfo", "args": [2]},
-          {"string": "spansRows", "args": [2]}, "row1", "row2",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [3]}, "col1", "cell3",
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [3]}, "col2", "row2", "cell4",
-          {"string": "columnInfo", "args": [3]},
-          {"string": "rowInfo", "args": [3]}, "col3", "row2",
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 4},
-          {"string": "tblRowInfo", "count": 3}]],
-        expectedBraille: [[
-          {"string": "tableAbbr"},
-          {"string": "tblColumnInfoAbbr", "count": 4},
-          {"string": "tblRowInfoAbbr", "count": 3},
-          {"string": "cellInfoAbbr", "args": [1, 1]}, "col1",
-          {"string": "cellInfoAbbr", "args": [2, 1]}, "col2",
-          {"string": "cellInfoAbbr", "args": [3, 1]}, "col3",
-          {"string": "cellInfoAbbr", "args": [1, 2]}, "col1", "row1",
-          {"string": "cellInfoAbbr", "args": [3, 2]}, "col3", "row1", "cell1",
-          {"string": "cellInfoAbbr", "args": [4, 2]}, "row1", "cell2",
-          {"string": "cellInfoAbbr", "args": [1, 3]}, "col1", "row2",
-          {"string": "cellInfoAbbr", "args": [2, 3]}, "col2", "row2", "cell3",
-          {"string": "cellInfoAbbr", "args": [3, 3]}, "col3", "row2", "cell4"],
-          ["col1",
-          {"string": "cellInfoAbbr", "args": [1, 1]}, "col2",
-          {"string": "cellInfoAbbr", "args": [2, 1]}, "col3",
-          {"string": "cellInfoAbbr", "args": [3, 1]}, "row1",
-          {"string": "cellInfoAbbr", "args": [1, 2]}, "col1", "cell1",
-          {"string": "cellInfoAbbr", "args": [3, 2]}, "col3", "row1", "cell2",
-          {"string": "cellInfoAbbr", "args": [4, 2]}, "row1", "row2",
-          {"string": "cellInfoAbbr", "args": [1, 3]}, "col1", "cell3",
-          {"string": "cellInfoAbbr", "args": [2, 3]}, "col2", "row2", "cell4",
-          {"string": "cellInfoAbbr", "args": [3, 3]}, "col3", "row2",
-          {"string": "tableAbbr"},
-          {"string": "tblColumnInfoAbbr", "count": 4},
-          {"string": "tblRowInfoAbbr", "count": 3}]],
-      }, {
-        accOrElmOrID: "table5",
-        expectedUtterance: [["Row1", "Row2"], ["Row1", "Row2"]],
-        expectedBraille: [["Row1", "Row2"], ["Row1", "Row2"]],
-      }, {
-        // Test pivot to table1_th1 from table1.
-        accOrElmOrID: "table1_th1",
-        oldAccOrElmOrID: "table1",
-        expectedUtterance: [[
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}, "col1"], ["col1",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}]],
-        expectedBraille: [[
-          {"string": "cellInfoAbbr", "args": [1, 1]}, "col1"], ["col1",
-          {"string": "cellInfoAbbr", "args": [1, 1]}]],
-      }, {
-        // Test pivot to table1_td2 from table1.
-        accOrElmOrID: "table1_td2",
-        oldAccOrElmOrID: "table1",
-        expectedUtterance: [[
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [2]}, "col2", "cell2"], ["cell2",
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [2]}, "col2"]],
-        expectedBraille: [
-          [{"string": "cellInfoAbbr", "args": [2, 2]}, "col2", "cell2"],
-          ["cell2", {"string": "cellInfoAbbr", "args": [2, 2]}, "col2"]],
-      }, {
-        // Test pivot to table1_td2 from table1_th1.
-        accOrElmOrID: "table1_td2",
-        oldAccOrElmOrID: "table1_th1",
-        expectedUtterance: [[
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [2]}, "col2", "cell2"], ["cell2",
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [2]}, "col2"]],
-        expectedBraille: [
-          [{"string": "cellInfoAbbr", "args": [2, 2]}, "col2", "cell2"],
-          ["cell2", {"string": "cellInfoAbbr", "args": [2, 2]}, "col2"]],
-      }, {
-        // Test pivot to table1_td2 from table1_td1.
-        accOrElmOrID: "table1_td2",
-        oldAccOrElmOrID: "table1_td1",
-        expectedUtterance: [[
-          {"string": "columnInfo", "args": [2]}, "col2", "cell2"], ["cell2",
-          {"string": "columnInfo", "args": [2]}, "col2"]],
-        expectedBraille: [
-          [{"string": "cellInfoAbbr", "args": [2, 2]}, "col2", "cell2"],
-          ["cell2", {"string": "cellInfoAbbr", "args": [2, 2]}, "col2"]],
-      }, {
-        // Test pivot to table2_cell_1 from table2.
-        accOrElmOrID: "table2_cell_1",
-        oldAccOrElmOrID: "table2",
-        expectedUtterance: [[
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}, "col1", "cell1"], ["cell1",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}, "col1"]],
-        expectedBraille: [
-          [{"string": "cellInfoAbbr", "args": [1, 1]}, "col1", "cell1"],
-          ["cell1", {"string": "cellInfoAbbr", "args": [1, 1]}, "col1"]],
-      }, {
-        // Test pivot to table2_cell_2 from table2.
-        accOrElmOrID: "table2_cell_2",
-        oldAccOrElmOrID: "table2",
-        expectedUtterance: [[
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [1]}, "col2",
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 1},
-          {"string": "tblRowInfo", "count": 2},
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}, "colheader",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]}, "colheader", "bla"], ["colheader",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [1]}, "bla",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]}, "colheader",
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 1},
-          {"string": "tblRowInfo", "count": 2},
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [1]}, "col2"]],
-        expectedBraille: [[
-          {"string": "cellInfoAbbr", "args": [2, 1]}, "col2",
-          {"string": "tableAbbr"},
-          {"string": "tblColumnInfoAbbr", "count": 1},
-          {"string": "tblRowInfoAbbr", "count": 2},
-          {"string": "cellInfoAbbr", "args": [1, 1]}, "colheader",
-          {"string": "cellInfoAbbr", "args": [1, 2]}, "colheader", "bla"],
-          ["colheader",
-          {"string": "cellInfoAbbr", "args": [1, 1]}, "bla",
-          {"string": "cellInfoAbbr", "args": [1, 2]}, "colheader",
-          {"string": "tableAbbr"},
-          {"string": "tblColumnInfoAbbr", "count": 1},
-          {"string": "tblRowInfoAbbr", "count": 2},
-          {"string": "cellInfoAbbr", "args": [2, 1]}, "col2"]],
-      }, {
-        // Test pivot to table2_cell_1 from table2_cell_2.
-        accOrElmOrID: "table2_cell_1",
-        oldAccOrElmOrID: "table2_cell_2",
-        expectedUtterance: [[
-          {"string": "columnInfo", "args": [1]}, "col1", "cell1"], ["cell1",
-          {"string": "columnInfo", "args": [1]}, "col1"]],
-        expectedBraille: [
-          [{"string": "cellInfoAbbr", "args": [1, 1]}, "col1", "cell1"],
-          ["cell1", {"string": "cellInfoAbbr", "args": [1, 1]}, "col1"]],
-      }, {
-        // Test pivot to table3_cell from table2.
-        accOrElmOrID: "table3_cell",
-        oldAccOrElmOrID: "table2",
-        expectedUtterance: [[
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [1]}, "col2",
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 1},
-          {"string": "tblRowInfo", "count": 2},
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]}, "colheader", "bla"], ["bla",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]}, "colheader",
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 1},
-          {"string": "tblRowInfo", "count": 2},
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [1]}, "col2"]],
-        expectedBraille: [
-          [{"string": "cellInfoAbbr", "args": [1, 2]}, "colheader", "bla"],
-          ["bla", {"string": "cellInfoAbbr", "args": [1, 2]}, "colheader"]],
-      }, {
-        // Test pivot to table3_cell from table2_cell_1.
-        accOrElmOrID: "table3_cell",
-        oldAccOrElmOrID: "table2_cell_1",
-        expectedUtterance: [[
-          {"string": "columnInfo", "args": [2]}, "col2",
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 1},
-          {"string": "tblRowInfo", "count": 2},
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]}, "colheader", "bla"], ["bla",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]}, "colheader",
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 1},
-          {"string": "tblRowInfo", "count": 2},
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [1]}, "col2"]],
-        expectedBraille: [
-          [{"string": "cellInfoAbbr", "args": [1, 2]}, "colheader", "bla"],
-          ["bla", {"string": "cellInfoAbbr", "args": [1, 2]}, "colheader"]],
-      }, {
-        // Test pivot to table3_cell from table3_ch.
-        accOrElmOrID: "table3_cell",
-        oldAccOrElmOrID: "table3_ch",
-        expectedUtterance: [[
-          {"string": "rowInfo", "args": [2]}, "bla"], ["bla",
-          {"string": "rowInfo", "args": [2]}]],
-        expectedBraille: [
-          [{"string": "cellInfoAbbr", "args": [1, 2]}, "bla"],
-          ["bla", {"string": "cellInfoAbbr", "args": [1, 2]}]],
-      }, {
-        // Test pivot to table3_cell from table1_td1.
-        accOrElmOrID: "table3_cell",
-        oldAccOrElmOrID: "table1_td1",
-        expectedUtterance: [[
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 2},
-          {"string": "tblRowInfo", "count": 2},
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [1]}, "col2",
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 1},
-          {"string": "tblRowInfo", "count": 2},
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]}, "colheader", "bla"], ["bla",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]}, "colheader",
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 1},
-          {"string": "tblRowInfo", "count": 2},
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [1]}, "col2",
-          {"string": "table"},
-          {"string": "tblColumnInfo", "count": 2},
-          {"string": "tblRowInfo", "count": 2}]],
-        expectedBraille: [
-          [{"string": "cellInfoAbbr", "args": [1, 2]}, "colheader", "bla"],
-          ["bla", {"string": "cellInfoAbbr", "args": [1, 2]}, "colheader"]],
-      }, {
-        // Test pivot to table4_ch_3 from table4.
-        accOrElmOrID: "table4_ch_3",
-        oldAccOrElmOrID: "table4",
-        expectedUtterance: [[
-          {"string": "columnInfo", "args": [3]},
-          {"string": "rowInfo", "args": [1]}, "col3"], ["col3",
-          {"string": "columnInfo", "args": [3]},
-          {"string": "rowInfo", "args": [1]}]],
-        expectedBraille: [
-          [{"string": "cellInfoAbbr", "args": [3, 1]}, "col3"],
-          ["col3", {"string": "cellInfoAbbr", "args": [3, 1]}]],
-      }, {
-        // Test pivot to table4_rh_1 from table4_ch_3.
-        accOrElmOrID: "table4_rh_1",
-        oldAccOrElmOrID: "table4_ch_3",
-        expectedUtterance: [[
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]},
-          {"string": "spansColumns", "args": [2]}, "col1", "row1"], ["row1",
-          {"string": "columnInfo", "args": [1]},
-          {"string": "rowInfo", "args": [2]},
-          {"string": "spansColumns", "args": [2]}, "col1"]],
-        expectedBraille: [
-          [{"string": "cellInfoAbbr", "args": [1, 2]}, "col1", "row1"],
-          ["row1", {"string": "cellInfoAbbr", "args": [1, 2]}, "col1"]],
-      }, {
-        // Test pivot to table4_cell_3 from table4_rh_1.
-        accOrElmOrID: "table4_cell_3",
-        oldAccOrElmOrID: "table4_rh_1",
-        expectedUtterance: [[
-          {"string": "columnInfo", "args": [4]},
-          {"string": "spansRows", "args": [2]}, "cell2"], ["cell2",
-          {"string": "columnInfo", "args": [4]},
-          {"string": "spansRows", "args": [2]}]],
-        expectedBraille: [
-          [{"string": "cellInfoAbbr", "args": [4, 2]}, "cell2"],
-          ["cell2", {"string": "cellInfoAbbr", "args": [4, 2]}]],
-      }, {
-        // Test pivot to table4_cell_5 from table4_cell_3.
-        accOrElmOrID: "table4_cell_5",
-        oldAccOrElmOrID: "table4_cell_3",
-        expectedUtterance: [[
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [3]}, "col2", "row2", "cell3"],
-          ["cell3",
-          {"string": "columnInfo", "args": [2]},
-          {"string": "rowInfo", "args": [3]}, "col2", "row2"]],
-        expectedBraille: [
-          [{"string": "cellInfoAbbr", "args": [2, 3]}, "col2", "row2", "cell3"],
-          ["cell3", {"string": "cellInfoAbbr", "args": [2, 3]}, "col2", "row2"]],
-      }];
-
-      // Test outputs (utterance and braille) for tables including their
-      // headers and cells.
-      function testOutputOrder(aOutputOrder) {
-        return function() {
-          SpecialPowers.pushPrefEnv({
-            "set": [[PREF_UTTERANCE_ORDER, aOutputOrder]],
-          }, function() {
-            tests.forEach(function run(test) {
-              testOutput(test.expectedUtterance[aOutputOrder], test.accOrElmOrID,
-                test.oldAccOrElmOrID);
-            });
-            AccessFuTest.nextTest();
-          });
-        };
-      }
-
-      AccessFuTest.addFunc(testOutputOrder(0));
-      AccessFuTest.addFunc(testOutputOrder(1));
-      AccessFuTest.waitForExplicitFinish();
-      AccessFuTest.runTests();
-    }
-
-    SimpleTest.waitForExplicitFinish();
-    addA11yLoadEvent(doTest);
-  </script>
-</head>
-<body>
-  <div id="root">
-    <a target="_blank"
-       href="https://bugzilla.mozilla.org/show_bug.cgi?id=830748"
-       title="[AccessFu] Improve reading of table semantics">
-       Mozilla Bug 830748
-       </a>
-    <p id="display"></p>
-    <div id="content" style="display: none"></div>
-    <pre id="test"></pre>
-    <table id="table1">
-      <thead>
-        <tr>
-          <th id="table1_th1">col1</th>
-          <th>col2</th>
-        </tr>
-      </thead>
-      <tbody>
-        <tr>
-          <td id="table1_td1">cell1</td>
-          <td id="table1_td2">cell2</td>
-        </tr>
-      </tbody>
-    </table>
-    <table id="table2" border="1">
-      <tr>
-        <td id="table2_cell_1" headers="table2_ch_1">cell1</td>
-        <td id="table2_cell_2" headers="table2_ch_2">
-          <table id="table3">
-            <thead>
-              <tr>
-                <th id="table3_ch">colheader</th>
-              </tr>
-            </thead>
-            <tbody>
-              <tr>
-                <td id="table3_cell">bla</td>
-              </tr>
-            </tbody>
-          </table>
-        </td>
-      </tr>
-      <tr>
-        <td id="table2_ch_1" scope="col">col1</td>
-        <td id="table2_ch_2" scope="col">col2</td>
-      </tr>
-    </table>
-    <table id="table4" border="1">
-      <thead>
-        <tr>
-          <th id="table4_ch_1">col1</th>
-          <th id="table4_ch_2">col2</th>
-          <td id="table4_ch_3" scope="col">col3</td>
-        </tr>
-      </thead>
-      <tbody>
-        <tr>
-          <th id="table4_rh_1" colspan="2">row1</th>
-          <td id="table4_cell_2">cell1</td>
-          <td id="table4_cell_3" rowspan="2">cell2</td>
-        </tr>
-        <tr>
-          <td id="table4_rh_2" scope="row">row2</td>
-          <td id="table4_cell_5">cell3</td>
-          <td id="table4_cell_6">cell4</td>
-        </tr>
-      </tbody>
-    </table>
-    <table id="table5">
-      <tr><td>Row1</td></tr>
-      <tr><td>Row2</td></tr>
-    </table>
-  </div>
-</body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/test_text_editable_navigation.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <title>Tests AccessFu navigation in focused editable</title>
-  <meta charset="utf-8" />
-  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-
-  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js">
-  </script>
-  <script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js">
-  </script>
-  <script src="chrome://mochikit/content/chrome-harness.js">
-  </script>
-
-  <script type="application/javascript" src="../common.js"></script>
-  <script type="application/javascript" src="../browser.js"></script>
-  <script type="application/javascript" src="../events.js"></script>
-  <script type="application/javascript" src="../role.js"></script>
-  <script type="application/javascript" src="../states.js"></script>
-  <script type="application/javascript" src="../layout.js"></script>
-  <script type="application/javascript" src="jsatcommon.js"></script>
-
-  <script type="application/javascript">
-    function checkMoveCaret(aMoveEvent, aSelectionEvent, aFrom, aTo) {
-      is(aMoveEvent.fromIndex, Math.min(aFrom, aTo), "Move to offset (fromIndex)");
-      is(aMoveEvent.toIndex, Math.max(aFrom, aTo), "Move to offset (toIndex)");
-      is(aSelectionEvent.fromIndex, aTo, "Caret offset (fromIndex)");
-      is(aSelectionEvent.toIndex, aTo, "Caret offset (toIndex)");
-    }
-
-    async function testEditableTextNavigation(doc, runner) {
-      // Editable text tests.
-      let evt;
-
-      evt = await runner.focusSelector("textarea",
-        AndroidEvents.VIEW_FOCUSED,
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      is(evt[0].editable, true, "focused item is editable");
-      runner.eventTextMatches(evt[1],
-        ["Please refrain from Mayoneggs during this salmonella scare."]);
-      is(evt[1].className, "android.widget.EditText", "editable class");
-      is(evt[1].focused, true, "a11y focused item is focused");
-      is(evt[2].fromIndex, 0, "Correct fromIndex");
-      is(evt[2].toIndex, 0, "Correct toIndex");
-
-      evt = await runner.activateCurrent(10,
-        AndroidEvents.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      checkMoveCaret(...evt, 0, 10);
-
-      evt = await runner.activateCurrent(20,
-        AndroidEvents.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      checkMoveCaret(...evt, 10, 20);
-
-      evt = await runner.moveNextByGranularity(MovementGranularity.WORD,
-        AndroidEvents.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      checkMoveCaret(...evt, 20, 29);
-
-      evt = await runner.moveNextByGranularity(MovementGranularity.WORD,
-        AndroidEvents.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      checkMoveCaret(...evt, 30, 36);
-
-      evt = await runner.moveNextByGranularity(MovementGranularity.CHARACTER,
-        AndroidEvents.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      checkMoveCaret(...evt, 36, 37);
-
-      evt = await runner.moveNextByGranularity(MovementGranularity.CHARACTER,
-        AndroidEvents.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      checkMoveCaret(...evt, 37, 38);
-
-      evt = await runner.blur(AndroidEvents.VIEW_FOCUSED);
-      is(evt.editable, false, "Focused out of editable");
-    }
-
-    function doTest() {
-      var doc = currentTabDocument();
-
-      addA11yLoadEvent(async function() {
-        let runner = new AccessFuContentTestRunner();
-        await runner.start();
-
-        await testEditableTextNavigation(doc, runner);
-
-        runner.finish();
-        closeBrowserWindow();
-        SimpleTest.finish();
-      }, doc.defaultView);
-    }
-
-    SimpleTest.waitForExplicitFinish();
-    addLoadEvent(
-      function() {
-        openBrowserWindow(
-          doTest,
-          getRootDirectory(window.location.href) + "doc_content_text.html");
-        });
-  </script>
-</head>
-<body id="body">
-
-  <a target="_blank"
-     title="Add tests for text editing and navigating"
-     href="https://bugzilla.mozilla.org/show_bug.cgi?id=1459677">Mozilla Bug 1459677</a>
-  <p id="display"></p>
-  <div id="content" style="display: none"></div>
-  <pre id="test">
-  </pre>
-</body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/test_text_editing.html
+++ /dev/null
@@ -1,135 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <title>Tests AccessFu text editing</title>
-  <meta charset="utf-8" />
-  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-
-  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js">
-  </script>
-  <script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js">
-  </script>
-  <script src="chrome://mochikit/content/chrome-harness.js">
-  </script>
-
-  <script type="application/javascript" src="../common.js"></script>
-  <script type="application/javascript" src="../browser.js"></script>
-  <script type="application/javascript" src="../events.js"></script>
-  <script type="application/javascript" src="../role.js"></script>
-  <script type="application/javascript" src="../states.js"></script>
-  <script type="application/javascript" src="../layout.js"></script>
-  <script type="application/javascript" src="jsatcommon.js"></script>
-
-  <script type="application/javascript">
-    async function testTextEditing(doc, runner) {
-      function checkInsert(textChangeEvent, testSelEvent, text, insertIndex, addedCount) {
-        runner.eventTextMatches(textChangeEvent, text);
-        is(textChangeEvent.addedCount, addedCount);
-        is(textChangeEvent.fromIndex, insertIndex);
-        runner.eventTextMatches(testSelEvent, text);
-        is(testSelEvent.toIndex, insertIndex + addedCount);
-        is(testSelEvent.fromIndex, insertIndex + addedCount);
-      }
-
-      let evt;
-
-      evt = await runner.focusSelector("input",
-        AndroidEvents.VIEW_FOCUSED,
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      is(evt[0].editable, true, "focused item is editable");
-      is(evt[1].className, "android.widget.EditText", "editable class");
-      is(evt[1].focused, true, "a11y focused item is focused");
-      is(evt[2].fromIndex, 0, "Caret at start (fromIndex)");
-      is(evt[2].toIndex, 0, "Caret at start (toIndex)");
-
-      evt = await runner.typeKey("B",
-        AndroidEvents.VIEW_TEXT_CHANGED,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      checkInsert(evt[0], evt[1], ["B"], 0, 1);
-
-      evt = await runner.typeKey("o",
-        AndroidEvents.VIEW_TEXT_CHANGED,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      checkInsert(evt[0], evt[1], ["Bo"], 1, 1);
-
-      evt = await runner.typeKey("b",
-        AndroidEvents.VIEW_TEXT_CHANGED,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      checkInsert(evt[0], evt[1], ["Bob"], 2, 1);
-
-      evt = await runner.typeKey(" ",
-        AndroidEvents.VIEW_TEXT_CHANGED,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      checkInsert(evt[0], evt[1], ["Bob "], 3, 1);
-
-      evt = await runner.typeKey("L",
-        AndroidEvents.VIEW_TEXT_CHANGED,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      checkInsert(evt[0], evt[1], ["Bob L"], 4, 1);
-
-      evt = await runner.typeKey("o",
-        AndroidEvents.VIEW_TEXT_CHANGED,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      checkInsert(evt[0], evt[1], ["Bob Lo"], 5, 1);
-
-      evt = await runner.typeKey("b",
-        AndroidEvents.VIEW_TEXT_CHANGED,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      checkInsert(evt[0], evt[1], ["Bob Lob"], 6, 1);
-
-      evt = await runner.typeKey("l",
-        AndroidEvents.VIEW_TEXT_CHANGED,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      checkInsert(evt[0], evt[1], ["Bob Lobl"], 7, 1);
-
-      evt = await runner.typeKey("a",
-        AndroidEvents.VIEW_TEXT_CHANGED,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      checkInsert(evt[0], evt[1], ["Bob Lobla"], 8, 1);
-
-      evt = await runner.typeKey("w",
-        AndroidEvents.VIEW_TEXT_CHANGED,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      checkInsert(evt[0], evt[1], ["Bob Loblaw"], 9, 1);
-
-      evt = await runner.blur(AndroidEvents.VIEW_FOCUSED);
-      is(evt.editable, false, "Focused out of editable");
-    }
-
-
-    function doTest() {
-      var doc = currentTabDocument();
-
-      addA11yLoadEvent(async function() {
-        let runner = new AccessFuContentTestRunner();
-        await runner.start();
-
-        await testTextEditing(doc, runner);
-
-        runner.finish();
-        closeBrowserWindow();
-        SimpleTest.finish();
-      }, doc.defaultView);
-    }
-
-    SimpleTest.waitForExplicitFinish();
-    addLoadEvent(
-      function() {
-        openBrowserWindow(
-          doTest,
-          getRootDirectory(window.location.href) + "doc_content_text.html");
-        });
-  </script>
-</head>
-<body id="body">
-
-  <a target="_blank"
-     title="Add tests for text editing and navigating"
-     href="https://bugzilla.mozilla.org/show_bug.cgi?id=1459677">Mozilla Bug 1459677</a>
-  <p id="display"></p>
-  <div id="content" style="display: none"></div>
-  <pre id="test">
-  </pre>
-</body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/test_text_navigation.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <title>Tests AccessFu text navigation</title>
-  <meta charset="utf-8" />
-  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-
-  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js">
-  </script>
-  <script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js">
-  </script>
-  <script src="chrome://mochikit/content/chrome-harness.js">
-  </script>
-
-  <script type="application/javascript" src="../common.js"></script>
-  <script type="application/javascript" src="../browser.js"></script>
-  <script type="application/javascript" src="../events.js"></script>
-  <script type="application/javascript" src="../role.js"></script>
-  <script type="application/javascript" src="../states.js"></script>
-  <script type="application/javascript" src="../layout.js"></script>
-  <script type="application/javascript" src="jsatcommon.js"></script>
-
-  <script type="application/javascript">
-    function checkFromToIndex(aEvent, aFrom, aTo) {
-      is(aEvent.fromIndex, aFrom, "Correct fromIndex");
-      is(aEvent.toIndex, aTo, "Correct toIndex");
-    }
-
-    async function testTextNavigation(doc, runner) {
-      let evt;
-
-      // Read-only text tests
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["Text content test document",
-        "These are my awards, Mother. From Army. " +
-        "The seal is for marksmanship, and the gorilla is for sand racing."]);
-
-      // "These"
-      evt = await runner.moveNextByGranularity(MovementGranularity.WORD,
-        AndroidEvents.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY);
-      checkFromToIndex(evt, 0, 5);
-
-      // "are"
-      evt = await runner.moveNextByGranularity(MovementGranularity.WORD,
-        AndroidEvents.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY);
-      checkFromToIndex(evt, 6, 9);
-
-      // "my"
-      evt = await runner.moveNextByGranularity(MovementGranularity.WORD,
-        AndroidEvents.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY);
-      checkFromToIndex(evt, 10, 12);
-
-      // "awards,"
-      evt = await runner.moveNextByGranularity(MovementGranularity.WORD,
-        AndroidEvents.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY);
-      checkFromToIndex(evt, 13, 20);
-
-      // "Mother."
-      evt = await runner.moveNextByGranularity(MovementGranularity.WORD,
-        AndroidEvents.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY);
-      checkFromToIndex(evt, 21, 28);
-
-      // "awards,"
-      evt = await runner.movePreviousByGranularity(MovementGranularity.WORD,
-        AndroidEvents.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY);
-      checkFromToIndex(evt, 13, 20);
-
-      // "my"
-      evt = await runner.movePreviousByGranularity(MovementGranularity.WORD,
-        AndroidEvents.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY);
-      checkFromToIndex(evt, 10, 12);
-
-      // "are"
-      evt = await runner.movePreviousByGranularity(MovementGranularity.WORD,
-        AndroidEvents.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY);
-      checkFromToIndex(evt, 6, 9);
-
-      // "These"
-      evt = await runner.movePreviousByGranularity(MovementGranularity.WORD,
-        AndroidEvents.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY);
-      checkFromToIndex(evt, 0, 5);
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      runner.eventTextMatches(evt, ["You're a good guy, mon frere. " +
-        "That means brother in French. I don't know how I know that. " +
-        "I took four years of Spanish."]);
-
-      // "You're"
-      evt = await runner.moveNextByGranularity(MovementGranularity.WORD,
-        AndroidEvents.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY);
-      is(evt.fromIndex, 0, "Correct fromIndex");
-      todo_is(evt.toIndex, 6, "Word boundary should be past the apostraphe");
-    }
-
-    function doTest() {
-      var doc = currentTabDocument();
-
-      addA11yLoadEvent(async function() {
-        let runner = new AccessFuContentTestRunner();
-        await runner.start();
-
-        await testTextNavigation(doc, runner);
-
-        runner.finish();
-        closeBrowserWindow();
-        SimpleTest.finish();
-      }, doc.defaultView);
-    }
-
-    SimpleTest.waitForExplicitFinish();
-    addLoadEvent(
-      function() {
-        openBrowserWindow(
-          doTest,
-          getRootDirectory(window.location.href) + "doc_content_text.html");
-        });
-  </script>
-</head>
-<body id="body">
-
-  <a target="_blank"
-     title="Add tests for text editing and navigating"
-     href="https://bugzilla.mozilla.org/show_bug.cgi?id=1459677">Mozilla Bug 1459677</a>
-  <p id="display"></p>
-  <div id="content" style="display: none"></div>
-  <pre id="test">
-  </pre>
-</body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/test_text_navigation_focus.html
+++ /dev/null
@@ -1,114 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <title>Tests AccessFu text entry focus and a11y focus</title>
-  <meta charset="utf-8" />
-  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-
-  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js">
-  </script>
-  <script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js">
-  </script>
-  <script src="chrome://mochikit/content/chrome-harness.js">
-  </script>
-
-  <script type="application/javascript" src="../common.js"></script>
-  <script type="application/javascript" src="../browser.js"></script>
-  <script type="application/javascript" src="../events.js"></script>
-  <script type="application/javascript" src="../role.js"></script>
-  <script type="application/javascript" src="../states.js"></script>
-  <script type="application/javascript" src="../layout.js"></script>
-  <script type="application/javascript" src="jsatcommon.js"></script>
-
-  <script type="application/javascript">
-    async function testTextNavigationFocus(doc, runner) {
-      let evt;
-
-      evt = await runner.focusSelector("textarea",
-        AndroidEvents.VIEW_FOCUSED,
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      is(evt[0].editable, true, "focused item is editable");
-      is(evt[1].focused, true, "a11y focused item is focused");
-      is(evt[1].className, "android.widget.EditText", "editable class");
-      runner.eventTextMatches(evt[1],
-        ["Please refrain from Mayoneggs during this salmonella scare."]);
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_FOCUSED,
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      is(evt[0].editable, false, "focused out of editable");
-      runner.eventTextMatches(evt[1], ["So we don't get dessert?", "label"]);
-      runner.isFocused("html");
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      is(evt.className, "android.widget.EditText", "editable class");
-      runner.isFocused("html");
-
-      evt = await runner.activateCurrent(0,
-        AndroidEvents.VIEW_CLICKED,
-        AndroidEvents.VIEW_FOCUSED,
-        AndroidEvents.VIEW_TEXT_SELECTION_CHANGED);
-      is(evt[1].editable, true, "focused item is editable");
-      is(evt[2].fromIndex, 0, "Cursor at start");
-      runner.isFocused("input[type=text]");
-
-      evt = await runner.movePrevious("Simple",
-        AndroidEvents.VIEW_FOCUSED,
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      is(evt[0].editable, false, "focused out of editable");
-      runner.eventTextMatches(evt[1], ["So we don't get dessert?", "label"]);
-      runner.isFocused("html");
-
-      evt = await runner.moveNext("Simple",
-        AndroidEvents.VIEW_ACCESSIBILITY_FOCUSED);
-      is(evt.className, "android.widget.EditText", "editable class");
-      runner.isFocused("html");
-
-      // XXX: TEXT_SELECTION_CHANGED should be fired here
-      evt = await runner.activateCurrent(0,
-        AndroidEvents.VIEW_CLICKED,
-        AndroidEvents.VIEW_FOCUSED);
-      is(evt[1].editable, true, "focused item is editable");
-      runner.isFocused("input[type=text]");
-
-      evt = await runner.blur(AndroidEvents.VIEW_FOCUSED);
-      is(evt.editable, false, "Focused out of editable");
-    }
-
-
-    function doTest() {
-      var doc = currentTabDocument();
-
-      addA11yLoadEvent(async function() {
-        let runner = new AccessFuContentTestRunner();
-        await runner.start();
-
-        await testTextNavigationFocus(doc, runner);
-
-        runner.finish();
-        closeBrowserWindow();
-        SimpleTest.finish();
-      }, doc.defaultView);
-    }
-
-    SimpleTest.waitForExplicitFinish();
-    addLoadEvent(
-      function() {
-        openBrowserWindow(
-          doTest,
-          getRootDirectory(window.location.href) + "doc_content_text.html");
-        });
-  </script>
-</head>
-<body id="body">
-
-  <a target="_blank"
-     title="Add tests for text editing and navigating"
-     href="https://bugzilla.mozilla.org/show_bug.cgi?id=1459677">Mozilla Bug 1459677</a>
-  <p id="display"></p>
-  <div id="content" style="display: none"></div>
-  <pre id="test">
-  </pre>
-</body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/test_traversal.html
+++ /dev/null
@@ -1,164 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <title>Tests AccessFu TraversalRules</title>
-  <meta charset="utf-8" />
-  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-
-  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js">
-  </script>
-  <script src="chrome://mochikit/content/chrome-harness.js">
-  </script>
-
-  <script type="application/javascript" src="../common.js"></script>
-  <script type="application/javascript" src="../browser.js"></script>
-  <script type="application/javascript" src="../events.js"></script>
-  <script type="application/javascript" src="../role.js"></script>
-  <script type="application/javascript" src="../states.js"></script>
-  <script type="application/javascript" src="../pivot.js"></script>
-  <script type="application/javascript" src="../layout.js"></script>
-
-  <script type="application/javascript">
-    const {TraversalRules} = ChromeUtils.import("resource://gre/modules/accessibility/Traversal.jsm");
-    var gBrowserWnd = null;
-    var gQueue = null;
-
-    function doTest() {
-      var doc = currentTabDocument();
-      var docAcc = getAccessible(doc, [nsIAccessibleDocument]);
-
-      gQueue = new eventQueue();
-
-      gQueue.onFinish = function onFinish() {
-        closeBrowserWindow();
-      };
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.Heading, null,
-                             ["heading-1", "heading-2", "heading-3", "heading-5"]);
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.Entry, null,
-                             ["input-1-1", "input-1-2", "input-1-3",
-                              "input-1-4", "input-1-5"]);
-
-      // move back an element to hit all the form elements, because the VC is
-      // currently at the first input element
-      gQueue.push(new setVCPosInvoker(docAcc, "movePrevious",
-                                      TraversalRules.Heading, "heading-1"));
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.FormElement, null,
-                             ["input-1-1", "input-1-2", "button-1-1",
-                              "radio-1-1", "radio-1-2", "input-1-3",
-                              "input-1-4", "button-1-2", "checkbox-1-1",
-                              "select-1-1", "select-1-2", "checkbox-1-2",
-                              "select-1-3", "input-1-5", "button-1-3",
-                              "button-2-1", "button-2-2", "button-2-3",
-                              "button-2-4", "checkbox-1-5", "switch-1"]);
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.Button, null,
-                             ["button-1-1", "button-1-2", "button-1-3",
-                              "button-2-1", "button-2-2", "button-2-3",
-                              "button-2-4"]);
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.RadioButton, null,
-                             ["radio-1-1", "radio-1-2"]);
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.Checkbox, null,
-                             ["checkbox-1-1", "checkbox-1-2", "checkbox-1-5",
-                              "switch-1"]);
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.Combobox, null,
-                             ["select-1-1", "select-1-2", "select-1-3"]);
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.List, null,
-                             ["list-1", "list-2", "list-3"]);
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.ListItem, null,
-                             ["listitem-1-1", "listitem-2-1", "listitem-2-2",
-                              "listitem-3-1", "listitem-3-2", "listitem-3-3",
-                              "listitem-3-4", "listitem-3-5", "listitem-3-6",
-                              "listitem-2-3"]);
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.Graphic, null,
-                             ["image-1", "image-2", "image-3"]);
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.Link, null,
-                             ["link-0", "link-1", "link-2", "link-3"]);
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.Anchor, null,
-                             ["anchor-1", "anchor-2"]);
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.Separator, null,
-                             ["separator-1", "separator-2"]);
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.Table, null,
-                             ["table-1", "grid", "table-2"]);
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.Simple, null,
-                             ["heading-1", "Name:", "input-1-1",
-                              "Favourite Ice Cream Flavour:", "input-1-2",
-                              "button-1-1", "Radios are old: ", "radio-1-1",
-                              "Radios are new: ", "radio-1-2", "Password:",
-                              "input-1-3", "Unlucky number:", "input-1-4",
-                              "button-1-2", "Check me: ", "checkbox-1-1",
-                              "select-1-1", "Value 1", "Value 2", "Value 3",
-                              "Check me too: ", "checkbox-1-2", "But not me: ",
-                              "Or me! ", "Value 1", "Value 2", "Value 3",
-                              "Electronic mailing address:", "input-1-5",
-                              "button-1-3", "heading-2", "heading-3",
-                              "button-2-1", "button-2-2", "button-2-3",
-                              "button-2-4", "Programming Language",
-                              "A esoteric weapon wielded by only the most " +
-                              "formidable warriors, for its unrelenting strict" +
-                              " power is unfathomable.",
-                              "• Lists of Programming Languages", "Lisp ",
-                              "1. Scheme", "2. Racket", "3. Clojure",
-                              "4. Standard Lisp", "link-0", " Lisp",
-                              "checkbox-1-5", " LeLisp", "• JavaScript",
-                              "heading-5", "image-1", "image-2", "image-3",
-                              "link-1", "anchor-1", "link-2", "anchor-2",
-                              "link-3", "3", "1", "4", "1", "Sunday", "M",
-                              "Week 1", "3", "4", "7", "2", "5 8", "gridcell4",
-                              "Dirty Words", "Meaning", "Mud", "Wet Dirt",
-                              "Dirt", "Messy Stuff", "statusbar-1",
-                              "statusbar-2", "switch-1",
-                              "This is a MathML formula ", "math-1",
-                              "with some text after."]);
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.Landmark, null,
-                             ["header-1", "main-1", "footer-1"]);
-
-
-      queueTraversalSequence(gQueue, docAcc, TraversalRules.Control, null,
-                             ["input-1-1", "input-1-2", "button-1-1",
-                              "radio-1-1", "radio-1-2", "input-1-3",
-                              "input-1-4", "button-1-2", "checkbox-1-1",
-                              "select-1-1", "select-1-2", "checkbox-1-2",
-                              "select-1-3", "input-1-5", "button-1-3",
-                              "button-2-1", "button-2-2", "button-2-3",
-                              "button-2-4", "link-0", "checkbox-1-5",
-                              "link-1", "link-2", "link-3", "switch-1"]);
-
-      gQueue.invoke();
-    }
-
-    SimpleTest.waitForExplicitFinish();
-    addLoadEvent(function() {
-      /* We open a new browser because we need to test with a top-level content
-         document. */
-      openBrowserWindow(
-        doTest,
-        getRootDirectory(window.location.href) + "doc_traversal.html");
-    });
-  </script>
-</head>
-<body id="body">
-
-  <a target="_blank"
-     title="Add tests for AccessFu TraversalRules"
-     href="https://bugzilla.mozilla.org/show_bug.cgi?id=933808">Mozilla Bug 933808</a>
-  <p id="display"></p>
-  <div id="content" style="display: none"></div>
-  <pre id="test">
-  </pre>
-</body>
-</html>
deleted file mode 100644
--- a/accessible/tests/mochitest/jsat/test_traversal_helper.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <title>Tests AccessFu TraversalRules</title>
-  <meta charset="utf-8" />
-  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
-
-  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js">
-  </script>
-  <script src="chrome://mochikit/content/chrome-harness.js">
-  </script>
-
-  <script type="application/javascript" src="../common.js"></script>
-  <script type="application/javascript" src="../browser.js"></script>
-  <script type="application/javascript" src="../events.js"></script>
-  <script type="application/javascript" src="../role.js"></script>
-  <script type="application/javascript" src="../states.js"></script>
-  <script type="application/javascript" src="../pivot.js"></script>
-  <script type="application/javascript" src="../layout.js"></script>
-
-  <script type="application/javascript">
-    const {TraversalHelper} = ChromeUtils.import("resource://gre/modules/accessibility/Traversal.jsm");
-
-    var vc;
-
-    function accessibleIs(aAccessible, aExpected, aMessage) {
-      if (!aAccessible && aAccessible == aExpected) {
-        ok(true, "Accessible is null. " + aMessage);
-      } else {
-        ok(aAccessible.DOMNode.id == aExpected || aAccessible.name == aExpected,
-          "expected '" + aExpected + "', got " + prettyName(vc.position) +
-          ". " + aMessage);
-      }
-    }
-
-    function walkSequence(aMethod, aRule, aExpectedSequence) {
-      for (var expected of aExpectedSequence) {
-        ok(TraversalHelper.move(vc, aMethod, aRule),
-          "successfully did " + aMethod + " with " + aRule);
-        accessibleIs(vc.position, expected, "landed on correct accessible");
-      }
-    }
-
-    function testTraversalHelper(aRule, aExpectedSequence) {
-      vc.position = null;
-
-      walkSequence("moveNext", aRule, aExpectedSequence);
-
-      ok(!TraversalHelper.move(vc, "moveNext", aRule), "reached end");
-
-      TraversalHelper.move(vc, "moveLast", "Simple");
-
-      walkSequence("movePrevious", aRule,
-        Array.from(aExpectedSequence).reverse());
-
-      ok(!TraversalHelper.move(vc, "movePrevious", aRule), "reached start");
-
-      vc.position = null;
-
-      ok(TraversalHelper.move(vc, "moveFirst", aRule), "moveFirst");
-
-      accessibleIs(vc.position, aExpectedSequence[0],
-        "moveFirst to correct accessible");
-
-      ok(TraversalHelper.move(vc, "moveLast", aRule), "moveLast");
-
-      accessibleIs(vc.position, aExpectedSequence[aExpectedSequence.length - 1],
-        "moveLast to correct accessible");
-    }
-
-
-    function doTest() {
-      var doc = currentTabDocument();
-      var docAcc = getAccessible(doc, [nsIAccessibleDocument]);
-      vc = docAcc.virtualCursor;
-
-      testTraversalHelper("Landmark",
-        ["heading-1", "heading-2", "statusbar-1"]);
-
-      testTraversalHelper("List",
-        ["Programming Language", "listitem-2-1", "listitem-3-1"]);
-
-      testTraversalHelper("Section",
-        ["heading-1", "heading-2", "heading-3",
-         "heading-5", "link-1", "statusbar-1"]);
-
-      SimpleTest.finish();
-    }
-
-    SimpleTest.waitForExplicitFinish();
-    addLoadEvent(function() {
-      /* We open a new browser because we need to test with a top-level content
-         document. */
-      openBrowserWindow(
-        doTest,
-        getRootDirectory(window.location.href) + "doc_traversal.html");
-    });
-  </script>
-</head>
-<body id="body">
-
-  <a target="_blank"
-     title="Add tests for AccessFu TraversalRules"
-     href="https://bugzilla.mozilla.org/show_bug.cgi?id=xxx">Mozilla Bug xxx</a>
-  <p id="display"></p>
-  <div id="content" style="display: none"></div>
-  <pre id="test">
-  </pre>
-</body>
-</html>
--- a/accessible/tests/mochitest/moz.build
+++ b/accessible/tests/mochitest/moz.build
@@ -13,17 +13,16 @@ A11Y_MANIFESTS += [
     'editabletext/a11y.ini',
     'elm/a11y.ini',
     'events/a11y.ini',
     'events/docload/a11y.ini',
     'focus/a11y.ini',
     'hittest/a11y.ini',
     'hyperlink/a11y.ini',
     'hypertext/a11y.ini',
-    'jsat/a11y.ini',
     'name/a11y.ini',
     'pivot/a11y.ini',
     'relations/a11y.ini',
     'role/a11y.ini',
     'scroll/a11y.ini',
     'selectable/a11y.ini',
     'states/a11y.ini',
     'table/a11y.ini',
--- a/browser/base/content/test/static/browser_all_files_referenced.js
+++ b/browser/base/content/test/static/browser_all_files_referenced.js
@@ -183,18 +183,16 @@ var whitelist = [
   {
     file: "chrome://mozapps/skin/downloads/downloadButtons.png",
     platforms: ["linux", "win"],
   },
   // Bug 1348559
   { file: "chrome://pippki/content/resetpassword.xul" },
   // Bug 1337345
   { file: "resource://gre/modules/Manifest.jsm" },
-  // Bug 1351097
-  { file: "resource://gre/modules/accessibility/AccessFu.jsm" },
   // Bug 1356045
   { file: "chrome://global/content/test-ipc.xul" },
   // Bug 1378173 (warning: still used by devtools)
   { file: "resource://gre/modules/Promise.jsm" },
   // Still used by WebIDE, which is going away but not entirely gone.
   { file: "resource://gre/modules/ZipUtils.jsm" },
   // Bug 1494170
   // (The references to these files are dynamically generated, so the test can't
--- a/dom/locales/jar.mn
+++ b/dom/locales/jar.mn
@@ -26,10 +26,12 @@
   locale/@AB_CD@/global/layout/HtmlForm.properties             (%chrome/layout/HtmlForm.properties)
   locale/@AB_CD@/global/security/caps.properties               (%chrome/security/caps.properties)
   locale/@AB_CD@/global/security/csp.properties                (%chrome/security/csp.properties)
   locale/@AB_CD@/global/security/security.properties           (%chrome/security/security.properties)
   locale/@AB_CD@/global/xml/prettyprint.dtd                    (%chrome/xml/prettyprint.dtd)
   locale/@AB_CD@/global-platform/win/accessible.properties     (%chrome/accessibility/win/accessible.properties)
   locale/@AB_CD@/global-platform/mac/accessible.properties     (%chrome/accessibility/mac/accessible.properties)
   locale/@AB_CD@/global-platform/unix/accessible.properties    (%chrome/accessibility/unix/accessible.properties)
+#ifdef ANDROID
   locale/@AB_CD@/global/AccessFu.properties                    (%chrome/accessibility/AccessFu.properties)
+#endif
   locale/@AB_CD@/global/mathml/mathml.properties               (%chrome/mathml/mathml.properties)
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -19,24 +19,16 @@ var { EventDispatcher } = ChromeUtils.im
 var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 var { XPCOMUtils } = ChromeUtils.import(
   "resource://gre/modules/XPCOMUtils.jsm"
 );
 var { TelemetryController } = ChromeUtils.import(
   "resource://gre/modules/TelemetryController.jsm"
 );
 
-if (AppConstants.ACCESSIBILITY) {
-  ChromeUtils.defineModuleGetter(
-    this,
-    "AccessFu",
-    "resource://gre/modules/accessibility/AccessFu.jsm"
-  );
-}
-
 ChromeUtils.defineModuleGetter(
   this,
   "AsyncPrefs",
   "resource://gre/modules/AsyncPrefs.jsm"
 );
 
 ChromeUtils.defineModuleGetter(
   this,
@@ -722,29 +714,16 @@ var BrowserApp = {
         // Make sure the "Open in App" context menu item appears at the bottom of the list
         this.initContextMenu();
         ExternalApps.init();
       },
       NativeWindow,
       "contextmenus"
     );
 
-    if (AppConstants.ACCESSIBILITY) {
-      InitLater(() =>
-        GlobalEventDispatcher.dispatch("GeckoView:AccessibilityReady")
-      );
-      GlobalEventDispatcher.registerListener((aEvent, aData, aCallback) => {
-        if (aData.touchEnabled) {
-          AccessFu.enable();
-        } else {
-          AccessFu.disable();
-        }
-      }, "GeckoView:AccessibilitySettings");
-    }
-
     InitLater(() => {
       (async () => {
         let downloadsDir = await Downloads.getPreferredDownloadsDirectory();
         let logsDir = OS.Path.join(downloadsDir, "memory-reports");
         await OS.File.removeDir(logsDir);
       })();
     });
 
--- a/mobile/android/chrome/geckoview/geckoview.js
+++ b/mobile/android/chrome/geckoview/geckoview.js
@@ -450,22 +450,16 @@ function InitLater(fn, object, name) {
 }
 
 function startup() {
   GeckoViewUtils.initLogging("XUL", window);
 
   const browser = createBrowser();
   ModuleManager.init(browser, [
     {
-      name: "GeckoViewAccessibility",
-      onInit: {
-        resource: "resource://gre/modules/GeckoViewAccessibility.jsm",
-      },
-    },
-    {
       name: "GeckoViewContent",
       onInit: {
         resource: "resource://gre/modules/GeckoViewContent.jsm",
         frameScript: "chrome://geckoview/content/GeckoViewContentChild.js",
       },
     },
     {
       name: "GeckoViewMedia",
deleted file mode 100644
--- a/mobile/android/modules/geckoview/GeckoViewAccessibility.jsm
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-var EXPORTED_SYMBOLS = ["GeckoViewAccessibility"];
-
-const { GeckoViewModule } = ChromeUtils.import(
-  "resource://gre/modules/GeckoViewModule.jsm"
-);
-const { XPCOMUtils } = ChromeUtils.import(
-  "resource://gre/modules/XPCOMUtils.jsm"
-);
-
-XPCOMUtils.defineLazyModuleGetters(this, {
-  EventDispatcher: "resource://gre/modules/Messaging.jsm",
-  AccessFu: "resource://gre/modules/accessibility/AccessFu.jsm",
-});
-
-class GeckoViewAccessibility extends GeckoViewModule {
-  onInit() {
-    EventDispatcher.instance.registerListener((aEvent, aData, aCallback) => {
-      if (aData.touchEnabled) {
-        AccessFu.enable();
-      } else {
-        AccessFu.disable();
-      }
-    }, "GeckoView:AccessibilitySettings");
-  }
-}
-
-// eslint-disable-next-line no-unused-vars
-const { debug, warn } = GeckoViewAccessibility.initLogging(
-  "GeckoViewAccessibility"
-);
--- a/mobile/android/modules/geckoview/moz.build
+++ b/mobile/android/modules/geckoview/moz.build
@@ -4,17 +4,16 @@
 # 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/.
 
 EXTRA_JS_MODULES += [
     'AndroidLog.jsm',
     'BrowserUsageTelemetry.jsm',
     'ContentCrashHandler.jsm',
     'DelayedInit.jsm',
-    'GeckoViewAccessibility.jsm',
     'GeckoViewActorChild.jsm',
     'GeckoViewAutoFill.jsm',
     'GeckoViewChildModule.jsm',
     'GeckoViewConsole.jsm',
     'GeckoViewContent.jsm',
     'GeckoViewContentBlocking.jsm',
     'GeckoViewContentBlockingController.jsm',
     'GeckoViewMedia.jsm',
--- a/tools/lint/license.yml
+++ b/tools/lint/license.yml
@@ -1,16 +1,15 @@
 ---
 license:
     description: License Check
     include:
         - .
     exclude:
         # These paths need to be triaged.
-        - accessible/jsat/Constants.jsm
         - build/pgo/js-input
         - build/workspace-hack/src/lib.rs
         - browser/app/blocklist.xml
         - browser/components/pocket/
         - browser/components/shell/ScreenshotChild.jsm
         - browser/extensions/webcompat/about-compat/aboutCompat.html
         - browser/extensions/webcompat/injections/js
         - config/external/ffi/preprocess_libffi_asm.py