| Index: chrome/browser/accessibility/browser_accessibility.cc
|
| ===================================================================
|
| --- chrome/browser/accessibility/browser_accessibility.cc (revision 61758)
|
| +++ chrome/browser/accessibility/browser_accessibility.cc (working copy)
|
| @@ -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;
|
| +}
|
|
|