From 8066e0214a74a3c2a88b16a1f6f291bb66342793 Mon Sep 17 00:00:00 2001 From: Yura Zenevich Date: Tue, 30 Oct 2018 17:52:24 +0000 Subject: [PATCH] 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 --- .../server/actors/accessibility/walker.js | 50 ++++++++++++++----- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/devtools/server/actors/accessibility/walker.js b/devtools/server/actors/accessibility/walker.js index 21816d40ee6d..37916e0a413c 100644 --- a/devtools/server/actors/accessibility/walker.js +++ b/devtools/server/actors/accessibility/walker.js @@ -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();