| Index: chrome/browser/resources/chromeos/chromevox/s2s/background/background.js
|
| diff --git a/chrome/browser/resources/chromeos/chromevox/s2s/background/background.js b/chrome/browser/resources/chromeos/chromevox/s2s/background/background.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..52926f7693d7af637338600cd7543d261ecdd08a
|
| --- /dev/null
|
| +++ b/chrome/browser/resources/chromeos/chromevox/s2s/background/background.js
|
| @@ -0,0 +1,103 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +goog.provide('s2s.Background');
|
| +goog.require('AutomationUtil');
|
| +
|
| +goog.scope(function() {
|
| +var RoleType = chrome.automation.RoleType;
|
| +
|
| +s2s.Background = function() {
|
| + chrome.tts.speak('Select to speak');
|
| + this.spokenSelection_ = new s2s.SpokenSelection();
|
| +};
|
| +
|
| +s2s.Background.prototype = {
|
| +};
|
| +
|
| +s2s.SpokenSelection = function() {
|
| + this.node_ = null;
|
| + this.down_ = false;
|
| +
|
| + chrome.automation.getDesktop(function(d) {
|
| + d.addEventListener('mousePressed', this.onMousePressed.bind(this), true);
|
| + d.addEventListener('mouseDragged', this.onMouseDragged.bind(this), true);
|
| + d.addEventListener('mouseMoved', this.onMouseDragged.bind(this), true);
|
| + d.addEventListener('mouseReleased', this.onMouseReleased.bind(this), true);
|
| + }.bind(this));
|
| +};
|
| +
|
| +s2s.SpokenSelection.prototype = {
|
| + onMousePressed: function(evt) {
|
| + this.node_ = null;
|
| + this.down_ = true;
|
| + chrome.tts.stop();
|
| + this.onMouseDragged(evt);
|
| + },
|
| +
|
| + onMouseDragged: function(evt) {
|
| + if (!this.down_)
|
| + return;
|
| +
|
| + var node = evt.target;
|
| + if (!this.node_) {
|
| + while (node && !node.name)
|
| + node = node.parent;
|
| + this.node_ = node;
|
| + } else {
|
| + var a1 = AutomationUtil.getAncestors(this.node_);
|
| + var a2 = AutomationUtil.getAncestors(node);
|
| + var d = AutomationUtil.getDivergence(a1, a2);
|
| + if (d > 0) {
|
| + this.node_ = a1[d - 1];
|
| + }
|
| + }
|
| +
|
| + chrome.accessibilityPrivate.setFocusRing([this.node_.location]);
|
| + },
|
| +
|
| + onMouseReleased: function(evt) {
|
| + this.onMouseDragged(evt);
|
| + this.down_ = false;
|
| +
|
| + if (!this.node_) {
|
| + chrome.accessibilityPrivate.setFocusRing([]);
|
| + return;
|
| + }
|
| +
|
| + this.enqueue_ = false;
|
| + this.speakAllDescendants_(this.node_);
|
| +
|
| + window.setTimeout(function() {
|
| + chrome.accessibilityPrivate.setFocusRing([]);
|
| + }, 1000);
|
| + },
|
| +
|
| + speakAllDescendants_: function(node) {
|
| + if (this.node_.role == RoleType.inlineTextBox ||
|
| + this.node_.role == RoleType.staticText) {
|
| + chrome.tts.speak(node.name, {lang: 'en-US',
|
| + 'enqueue': this.enqueue_});
|
| + this.enqueue_ = true;
|
| + return true;
|
| + }
|
| +
|
| + var spoke = false;
|
| + for (var c = node.firstChild; c; c = c.nextSibling) {
|
| + if (this.speakAllDescendants_(c))
|
| + spoke = true;
|
| + }
|
| + if (!spoke && node.name) {
|
| + chrome.tts.speak(node.name, {lang: 'en-US',
|
| + 'enqueue': this.enqueue_});
|
| + this.enqueue_ = true;
|
| + spoke = true;
|
| + }
|
| + return spoke;
|
| + }
|
| +};
|
| +
|
| +new s2s.Background();
|
| +
|
| +}); // goog.scope
|
|
|