Commit 66698953 authored by David Tseng's avatar David Tseng Committed by Commit Bot

Reland2: Fire focus if needed in automation api

TBR=dtseng@chromium.org
Bug: 773866

Original change

Reviewed-on: https://chromium-review.googlesource.com/723606
Commit-Queue: David Tseng <dtseng@chromium.org>
Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#509911}
Cq-Include-Trybots: master.tryserver.chromium.linux:closure_compilation
Change-Id: I1a1be30f3e430f2417ab3ff4b9733de1b8004077
Reviewed-on: https://chromium-review.googlesource.com/728302Reviewed-by: default avatarDavid Tseng <dtseng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#510131}
parent 63d12e3a
......@@ -298,8 +298,8 @@ DesktopAutomationHandler.prototype = {
var node = evt.target;
// Discard focus events on embeddedObject.
if (node.role == RoleType.EMBEDDED_OBJECT)
// Discard focus events on embeddedObject and webView.
if (node.role == RoleType.EMBEDDED_OBJECT || node.role == RoleType.WEB_VIEW)
return;
this.createTextEditHandlerIfNeeded_(evt.target);
......
......@@ -285,11 +285,7 @@ automationInternal.onNodesRemoved.addListener(function(treeID, nodeIDs) {
automationInternal.onAccessibilityEvent.addListener(function(eventParams) {
var id = eventParams.treeID;
var targetTree = AutomationRootNode.getOrCreate(id);
var isFocusEvent = false;
if (eventParams.eventType == 'focus') {
isFocusEvent = true;
} else if (eventParams.eventType == 'blur') {
if (eventParams.eventType == 'blur') {
// 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
// events but otherwise not handle blur events specially.
......@@ -300,27 +296,31 @@ automationInternal.onAccessibilityEvent.addListener(function(eventParams) {
eventParams.eventType == 'mediaStoppedPlaying') {
// These events are global to the tree.
eventParams.targetID = privates(targetTree).impl.id;
}
// 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) {
} else {
var previousFocusedNode = automationUtil.focusedNode;
automationUtil.updateFocusedNode();
if (automationUtil.focusedNode &&
automationUtil.focusedNode == previousFocusedNode) {
return;
}
if (automationUtil.focusedNode) {
targetTree = automationUtil.focusedNode.root;
eventParams.treeID = privates(targetTree).impl.treeID;
eventParams.targetID = privates(automationUtil.focusedNode).impl.id;
// Fire focus events if necessary.
if (automationUtil.focusedNode &&
automationUtil.focusedNode != previousFocusedNode) {
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;
// 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