Bug 1498235 - lazy load accessibility highlighter in accessibility walker actor. r=gl

MozReview-Commit-ID: 7xFlSocDPVG

Differential Revision: https://phabricator.services.mozilla.com/D9581

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Yura Zenevich 2018-10-30 17:52:24 +00:00
parent 892c345b03
commit 8066e0214a

View File

@ -8,15 +8,16 @@ const { Cc, Ci } = require("chrome");
const Services = require("Services");
const { Actor, ActorClassWithSpec } = require("devtools/shared/protocol");
const { accessibleWalkerSpec } = require("devtools/shared/specs/accessibility");
const { isXUL } = require("devtools/server/actors/highlighters/utils/markup");
const { CustomHighlighterActor, register } =
require("devtools/server/actors/highlighters");
loader.lazyRequireGetter(this, "AccessibleActor", "devtools/server/actors/accessibility/accessible", true);
loader.lazyRequireGetter(this, "CustomHighlighterActor", "devtools/server/actors/highlighters", true);
loader.lazyRequireGetter(this, "DevToolsUtils", "devtools/shared/DevToolsUtils");
loader.lazyRequireGetter(this, "events", "devtools/shared/event-emitter");
loader.lazyRequireGetter(this, "isDefunct", "devtools/server/actors/utils/accessibility", true);
loader.lazyRequireGetter(this, "isTypeRegistered", "devtools/server/actors/highlighters", true);
loader.lazyRequireGetter(this, "isWindowIncluded", "devtools/shared/layout/utils", true);
loader.lazyRequireGetter(this, "isXUL", "devtools/server/actors/highlighters/utils/markup", true);
loader.lazyRequireGetter(this, "register", "devtools/server/actors/highlighters", true);
const nsIAccessibleEvent = Ci.nsIAccessibleEvent;
const nsIAccessibleStateChangeEvent = Ci.nsIAccessibleStateChangeEvent;
@ -92,9 +93,6 @@ const NAME_FROM_SUBTREE_RULE_ROLES = new Set([
const IS_OSX = Services.appinfo.OS === "Darwin";
register("AccessibleHighlighter", "accessible");
register("XULWindowAccessibleHighlighter", "xul-accessible");
/**
* Helper function that determines if nsIAccessible object is in stale state. When an
* object is stale it means its subtree is not up to date.
@ -130,12 +128,30 @@ const AccessibleWalkerActor = ActorClassWithSpec(accessibleWalkerSpec, {
this.onHovered = this.onHovered.bind(this);
this.onKey = this.onKey.bind(this);
this.onHighlighterEvent = this.onHighlighterEvent.bind(this);
},
this.highlighter = CustomHighlighterActor(this, isXUL(this.rootWin) ?
"XULWindowAccessibleHighlighter" : "AccessibleHighlighter");
get highlighter() {
if (!this._highlighter) {
if (isXUL(this.rootWin)) {
if (!isTypeRegistered("XULWindowAccessibleHighlighter")) {
register("XULWindowAccessibleHighlighter", "xul-accessible");
}
this.manage(this.highlighter);
this.highlighter.on("highlighter-event", this.onHighlighterEvent);
this._highlighter = CustomHighlighterActor(this,
"XULWindowAccessibleHighlighter");
} else {
if (!isTypeRegistered("AccessibleHighlighter")) {
register("AccessibleHighlighter", "accessible");
}
this._highlighter = CustomHighlighterActor(this, "AccessibleHighlighter");
}
this.manage(this._highlighter);
this._highlighter.on("highlighter-event", this.onHighlighterEvent);
}
return this._highlighter;
},
setA11yServiceGetter() {
@ -188,8 +204,10 @@ const AccessibleWalkerActor = ActorClassWithSpec(accessibleWalkerSpec, {
this.reset();
this.highlighter.off("highlighter-event", this.onHighlighterEvent);
this.highlighter = null;
if (this._highlighter) {
this._highlighter.off("highlighter-event", this.onHighlighterEvent);
this._highlighter = null;
}
this.targetActor = null;
this.refMap = null;
@ -470,6 +488,10 @@ const AccessibleWalkerActor = ActorClassWithSpec(accessibleWalkerSpec, {
* side.
*/
unhighlight() {
if (!this._highlighter) {
return;
}
this.highlighter.hide();
},
@ -701,7 +723,9 @@ const AccessibleWalkerActor = ActorClassWithSpec(accessibleWalkerSpec, {
* Cacncel picker pick. Remvoe all content listeners and hide the highlighter.
*/
cancelPick: function() {
this.highlighter.hide();
if (this._highlighter) {
this.highlighter.hide();
}
if (this._isPicking) {
this._stopPickerListeners();