Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1580)

Unified Diff: chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js

Issue 2971913003: Make character text changes work in Docs (Closed)
Patch Set: Proper diffbase. Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/resources/chromeos/chromevox/cvox2/background/editing.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js
index 1f3f614f456956e3267a7211d83ff11298e7050f..a3510802e551c0ead6243f8cb070e3a6a41b2f98 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/cursors.js
@@ -84,7 +84,7 @@ cursors.Cursor = function(node, index) {
// The exception is when a user types at the end of a line. In that case,
// staying on the current node is appropriate.
- if (node && node.nextOnLine && nextNode) {
+ if (node && node.nextOnLine && node.nextOnLine.role && nextNode) {
node = nextNode;
index = 0;
}
@@ -101,9 +101,13 @@ cursors.Cursor = function(node, index) {
this.index_ = index;
/** @type {Array<AutomationNode>} @private */
this.ancestry_ = [];
+ /** @type {!Array<number>} @private */
+ this.recoveryChildIndex_ = [];
+
var nodeWalker = node;
while (nodeWalker) {
this.ancestry_.push(nodeWalker);
+ this.recoveryChildIndex_.push(nodeWalker.indexInParent);
dmazzoni 2017/07/06 21:17:06 I like this idea in general but how about a tiny b
David Tseng 2017/07/06 22:15:44 I'm actually something slightly different here tha
nodeWalker = nodeWalker.parent;
if (nodeWalker && nodeWalker.role == RoleType.WINDOW)
break;
@@ -189,6 +193,34 @@ cursors.Cursor.prototype = {
return null;
},
+ /**
+ * Returns the node. If the node is invalid since the last time it
+ * was accessed, attempts to recover it based on a child index.
+ * @return {AutomationNode}
+ */
+ get recoveryNode() {
+ for (var i = 0; i < this.ancestry_.length; i++) {
+ var firstValidNode = this.ancestry_[i];
+ if (firstValidNode != null && firstValidNode.role !== undefined &&
+ firstValidNode.root != undefined) {
+ if (i == 0)
+ return firstValidNode;
+
+ // Otherwise, attempt to recover.
+ var node = firstValidNode;
+ for (var j = i - 1; j >= 0; j--) {
+ var index = this.recoveryChildIndex_[j];
+ var children = node.children;
+ if (!children[index])
+ return node;
+ node = children[index];
+ }
+ return node;
+ }
+ }
+ return null;
+ },
+
/**
* @return {number}
*/
« no previous file with comments | « no previous file | chrome/browser/resources/chromeos/chromevox/cvox2/background/editing.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698