summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_predicate.js10
-rw-r--r--chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_util.js2
-rw-r--r--chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js2
-rw-r--r--chrome/browser/ui/views/website_settings/permissions_bubble_view.cc6
-rw-r--r--ui/views/bubble/bubble_delegate.cc7
5 files changed, 26 insertions, 1 deletions
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_predicate.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_predicate.js
index 3e6fe19..5b4e23d 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_predicate.js
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_predicate.js
@@ -83,3 +83,13 @@ AutomationPredicate.linebreak = function(first, second) {
return fl.top != sl.top ||
(fl.top + fl.height != sl.top + sl.height);
};
+
+/**
+ * Leaf nodes that should be ignored.
+ * @param {chrome.automation.AutomationNode} node
+ * @return {boolean}
+ */
+AutomationPredicate.shouldIgnoreLeaf = function(node) {
+ return AutomationPredicate.leaf(node) &&
+ node.role == chrome.automation.RoleType.client;
+};
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_util.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_util.js
index b0f4e59..4275a1c 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_util.js
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/automation_util.js
@@ -113,6 +113,8 @@ AutomationUtil.findNextNode = function(cur, dir, pred) {
return null;
cur = next;
next = AutomationUtil.findNodePre(next, dir, pred);
+ if (next && AutomationPredicate.shouldIgnoreLeaf(next))
+ next = null;
} while (!next);
return next;
};
diff --git a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js
index 7d7aa55..1d90039 100644
--- a/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js
+++ b/chrome/browser/resources/chromeos/chromevox/cvox2/background/output.js
@@ -195,7 +195,7 @@ Output.RULES = {
speak: '@describe_slider($value, $name)'
},
staticText: {
- speak: '$value'
+ speak: '$value $name'
},
tab: {
speak: '@describe_tab($name)'
diff --git a/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc b/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
index ba6c1c4..fcfdf13 100644
--- a/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
+++ b/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
@@ -167,6 +167,7 @@ class PermissionsBubbleDelegateView : public views::BubbleDelegateView,
const gfx::FontList& GetTitleFontList() const override;
base::string16 GetWindowTitle() const override;
void OnWidgetDestroying(views::Widget* widget) override;
+ void GetAccessibleState(ui::AXViewState* state) override;
// ButtonListener:
void ButtonPressed(views::Button* button, const ui::Event& event) override;
@@ -349,6 +350,11 @@ void PermissionsBubbleDelegateView::OnWidgetDestroying(views::Widget* widget) {
}
}
+void PermissionsBubbleDelegateView::GetAccessibleState(ui::AXViewState* state) {
+ views::BubbleDelegateView::GetAccessibleState(state);
+ state->role = ui::AX_ROLE_ALERT_DIALOG;
+}
+
void PermissionsBubbleDelegateView::ButtonPressed(views::Button* button,
const ui::Event& event) {
if (!owner_)
diff --git a/ui/views/bubble/bubble_delegate.cc b/ui/views/bubble/bubble_delegate.cc
index 55ce980..a2070c0 100644
--- a/ui/views/bubble/bubble_delegate.cc
+++ b/ui/views/bubble/bubble_delegate.cc
@@ -305,6 +305,13 @@ void BubbleDelegateView::HandleVisibilityChanged(Widget* widget, bool visible) {
else
anchor_widget()->GetTopLevelWidget()->EnableInactiveRendering();
}
+
+ if (widget == GetWidget() && visible) {
+ ui::AXViewState state;
+ GetAccessibleState(&state);
+ if (state.role == ui::AX_ROLE_ALERT_DIALOG)
+ NotifyAccessibilityEvent(ui::AX_EVENT_ALERT, true);
+ }
}
} // namespace views