summaryrefslogtreecommitdiffstats
path: root/chrome/browser/accessibility/browser_accessibility.cc
diff options
context:
space:
mode:
authorctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-07 05:20:23 +0000
committerctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-07 05:20:23 +0000
commitf27e81c63be89c62d84105a9329c0744c27e1641 (patch)
tree011fa1f7421d32e5629a7628766ac7e0009e8dc4 /chrome/browser/accessibility/browser_accessibility.cc
parent68e677bf27869d144da2131cf5d60df785d5b920 (diff)
downloadchromium_src-f27e81c63be89c62d84105a9329c0744c27e1641.zip
chromium_src-f27e81c63be89c62d84105a9329c0744c27e1641.tar.gz
chromium_src-f27e81c63be89c62d84105a9329c0744c27e1641.tar.bz2
Make BrowserAccessibilityManager cross platform. Step 2.
1. Move common logic and fields from BrowserAccessibilityMangerWin to BrowserAccessibilityManager. 2. Move common logic and fields from BrowserAccessibilityWin to BrowserAccessibility. BUG=55264 TEST=interactive_ui_tests:AccessibilityWinBrowserTest.* TEST=unit_tests:BrowserAccessibilityTest.* Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=61740 Review URL: http://codereview.chromium.org/3551015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@61765 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/accessibility/browser_accessibility.cc')
-rw-r--r--chrome/browser/accessibility/browser_accessibility.cc94
1 files changed, 94 insertions, 0 deletions
diff --git a/chrome/browser/accessibility/browser_accessibility.cc b/chrome/browser/accessibility/browser_accessibility.cc
index fa87e09..38cf5cc 100644
--- a/chrome/browser/accessibility/browser_accessibility.cc
+++ b/chrome/browser/accessibility/browser_accessibility.cc
@@ -4,8 +4,102 @@
#include "chrome/browser/accessibility/browser_accessibility.h"
+#include "base/logging.h"
+#include "chrome/browser/accessibility/browser_accessibility_manager.h"
+
BrowserAccessibility::BrowserAccessibility() {
}
BrowserAccessibility::~BrowserAccessibility() {
}
+
+void BrowserAccessibility::Initialize(
+ BrowserAccessibilityManager* manager,
+ BrowserAccessibility* parent,
+ int32 child_id,
+ int32 index_in_parent,
+ const webkit_glue::WebAccessibility& src) {
+ manager_ = manager;
+ parent_ = parent;
+ child_id_ = child_id;
+ index_in_parent_ = index_in_parent;
+
+ renderer_id_ = src.id;
+ name_ = src.name;
+ value_ = src.value;
+ attributes_ = src.attributes;
+ html_attributes_ = src.html_attributes;
+ location_ = src.location;
+ role_ = src.role;
+ state_ = src.state;
+
+ Initialize();
+}
+
+void BrowserAccessibility::ReleaseTree() {
+ // Now we can safely call InactivateTree on our children and remove
+ // references to them, so that as much of the tree as possible will be
+ // destroyed now - however, nodes that still have references to them
+ // might stick around a while until all clients have released them.
+ for (std::vector<BrowserAccessibility*>::iterator iter =
+ children_.begin();
+ iter != children_.end(); ++iter) {
+ (*iter)->ReleaseTree();
+ (*iter)->ReleaseReference();
+ }
+ children_.clear();
+ manager_->Remove(child_id_);
+}
+
+void BrowserAccessibility::AddChild(BrowserAccessibility* child) {
+ children_.push_back(child);
+}
+
+bool BrowserAccessibility::IsDescendantOf(
+ BrowserAccessibility* ancestor) {
+ if (this == ancestor) {
+ return true;
+ } else if (parent_) {
+ return parent_->IsDescendantOf(ancestor);
+ }
+
+ return false;
+}
+
+BrowserAccessibility* BrowserAccessibility::GetParent() {
+ return parent_;
+}
+
+uint32 BrowserAccessibility::GetChildCount() {
+ return children_.size();
+}
+
+BrowserAccessibility* BrowserAccessibility::GetChild(uint32 child_index) {
+ DCHECK(child_index < children_.size());
+ return children_[child_index];
+}
+
+BrowserAccessibility* BrowserAccessibility::GetPreviousSibling() {
+ if (parent_ && index_in_parent_ > 0)
+ return parent_->children_[index_in_parent_ - 1];
+
+ return NULL;
+}
+
+BrowserAccessibility* BrowserAccessibility::GetNextSibling() {
+ if (parent_ &&
+ index_in_parent_ >= 0 &&
+ index_in_parent_ < static_cast<int>(parent_->children_.size() - 1)) {
+ return parent_->children_[index_in_parent_ + 1];
+ }
+
+ return NULL;
+}
+
+void BrowserAccessibility::ReplaceChild(
+ const BrowserAccessibility* old_acc, BrowserAccessibility* new_acc) {
+ DCHECK_EQ(children_[old_acc->index_in_parent_], old_acc);
+
+ old_acc = children_[old_acc->index_in_parent_];
+ children_[old_acc->index_in_parent_] = new_acc;
+}