diff options
author | ctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-07 05:20:23 +0000 |
---|---|---|
committer | ctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-07 05:20:23 +0000 |
commit | f27e81c63be89c62d84105a9329c0744c27e1641 (patch) | |
tree | 011fa1f7421d32e5629a7628766ac7e0009e8dc4 /chrome/browser/accessibility/browser_accessibility.cc | |
parent | 68e677bf27869d144da2131cf5d60df785d5b920 (diff) | |
download | chromium_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.cc | 94 |
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; +} |