Commit 9af30c03 authored by David Tseng's avatar David Tseng Committed by Commit Bot

Fire focus if needed in automation api

Bug: 773866

Change-Id: I4e7295137141fa4f1605247cafb3bc4d40a09a59
Reviewed-on: https://chromium-review.googlesource.com/723606
Commit-Queue: David Tseng <dtseng@chromium.org>
Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#509911}
parent 251d7a78
...@@ -285,11 +285,7 @@ automationInternal.onNodesRemoved.addListener(function(treeID, nodeIDs) { ...@@ -285,11 +285,7 @@ automationInternal.onNodesRemoved.addListener(function(treeID, nodeIDs) {
automationInternal.onAccessibilityEvent.addListener(function(eventParams) { automationInternal.onAccessibilityEvent.addListener(function(eventParams) {
var id = eventParams.treeID; var id = eventParams.treeID;
var targetTree = AutomationRootNode.getOrCreate(id); var targetTree = AutomationRootNode.getOrCreate(id);
if (eventParams.eventType == 'blur') {
var isFocusEvent = false;
if (eventParams.eventType == 'focus') {
isFocusEvent = true;
} else if (eventParams.eventType == 'blur') {
// Work around an issue where Chrome sends us 'blur' events on the // Work around an issue where Chrome sends us 'blur' events on the
// root node when nothing has focus, we need to treat those as focus // root node when nothing has focus, we need to treat those as focus
// events but otherwise not handle blur events specially. // events but otherwise not handle blur events specially.
...@@ -300,27 +296,31 @@ automationInternal.onAccessibilityEvent.addListener(function(eventParams) { ...@@ -300,27 +296,31 @@ automationInternal.onAccessibilityEvent.addListener(function(eventParams) {
eventParams.eventType == 'mediaStoppedPlaying') { eventParams.eventType == 'mediaStoppedPlaying') {
// These events are global to the tree. // These events are global to the tree.
eventParams.targetID = privates(targetTree).impl.id; eventParams.targetID = privates(targetTree).impl.id;
} } else {
// When we get a focus event, ignore the actual event target, and instead
// check what node has focus globally. If that represents a focus change,
// fire a focus event on the correct target.
if (isFocusEvent) {
var previousFocusedNode = automationUtil.focusedNode; var previousFocusedNode = automationUtil.focusedNode;
automationUtil.updateFocusedNode(); automationUtil.updateFocusedNode();
if (automationUtil.focusedNode &&
automationUtil.focusedNode == previousFocusedNode) {
return;
}
if (automationUtil.focusedNode) { // Fire focus events if necessary.
targetTree = automationUtil.focusedNode.root; if (automationUtil.focusedNode &&
eventParams.treeID = privates(targetTree).impl.treeID; automationUtil.focusedNode != previousFocusedNode) {
eventParams.targetID = privates(automationUtil.focusedNode).impl.id; var eventParamsCopy = {};
for (var key in eventParams)
eventParamsCopy[key] = eventParams[key];
eventParamsCopy['eventType'] = 'focus';
eventParamsCopy['treeID'] =
privates(automationUtil.focusedNode.root).impl.treeID;
eventParamsCopy['targetID'] =
privates(automationUtil.focusedNode).impl.id;
privates(automationUtil.focusedNode.root)
.impl.onAccessibilityEvent(eventParamsCopy);
} }
} }
if (!privates(targetTree).impl.onAccessibilityEvent(eventParams)) // Note that focus type events have already been handled above if there was a
// focused node. All other events, even non-focus events that triggered a
// focus dispatch, still need to have their original event fired.
if ((!automationUtil.focusedNode || eventParams.eventType != 'focus') &&
!privates(targetTree).impl.onAccessibilityEvent(eventParams))
return; return;
// If we're not waiting on a callback to getTree(), we can early out here. // If we're not waiting on a callback to getTree(), we can early out here.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment