Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: chrome/browser/accessibility/browser_accessibility.cc

Issue 4292001: Add basic support for accessibility hit testing within web contents.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/accessibility/browser_accessibility.h" 5 #include "chrome/browser/accessibility/browser_accessibility.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/string_number_conversions.h"
8 #include "chrome/browser/accessibility/browser_accessibility_manager.h" 9 #include "chrome/browser/accessibility/browser_accessibility_manager.h"
9 10
10 BrowserAccessibility::BrowserAccessibility() { 11 BrowserAccessibility::BrowserAccessibility() {
11 } 12 }
12 13
13 BrowserAccessibility::~BrowserAccessibility() { 14 BrowserAccessibility::~BrowserAccessibility() {
14 } 15 }
15 16
16 void BrowserAccessibility::Initialize( 17 void BrowserAccessibility::Initialize(
17 BrowserAccessibilityManager* manager, 18 BrowserAccessibilityManager* manager,
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 return NULL; 97 return NULL;
97 } 98 }
98 99
99 void BrowserAccessibility::ReplaceChild( 100 void BrowserAccessibility::ReplaceChild(
100 const BrowserAccessibility* old_acc, BrowserAccessibility* new_acc) { 101 const BrowserAccessibility* old_acc, BrowserAccessibility* new_acc) {
101 DCHECK_EQ(children_[old_acc->index_in_parent_], old_acc); 102 DCHECK_EQ(children_[old_acc->index_in_parent_], old_acc);
102 103
103 old_acc = children_[old_acc->index_in_parent_]; 104 old_acc = children_[old_acc->index_in_parent_];
104 children_[old_acc->index_in_parent_] = new_acc; 105 children_[old_acc->index_in_parent_] = new_acc;
105 } 106 }
107
108 gfx::Rect BrowserAccessibility::GetBoundsRect() {
109 gfx::Rect bounds = location_;
110
111 // Adjust the bounds by the top left corner of the containing view's bounds
112 // in screen coordinates.
113 gfx::Point top_left = manager_->GetViewBounds().origin();
114 bounds.Offset(top_left);
115
116 // Adjust top left position by the root document's scroll offset.
117 BrowserAccessibility* root = manager_->GetRoot();
118 int scroll_x = 0;
119 int scroll_y = 0;
120 root->GetAttributeAsInt(
121 WebAccessibility::ATTR_DOC_SCROLLX, &scroll_x);
122 root->GetAttributeAsInt(
123 WebAccessibility::ATTR_DOC_SCROLLY, &scroll_y);
124 bounds.Offset(-scroll_x, -scroll_y);
125
126 return bounds;
127 }
128
129 BrowserAccessibility* BrowserAccessibility::BrowserAccessibilityForPoint(
130 const gfx::Point& point) {
131 // Walk the children recursively looking for the BrowserAccessibility that
132 // most tightly encloses the specified point.
133 for (int i = children_.size() - 1; i >= 0; --i) {
134 BrowserAccessibility* child = children_[i];
135 if (child->GetBoundsRect().Contains(point))
136 return child->BrowserAccessibilityForPoint(point);
137 }
138 return this;
139 }
140
141 bool BrowserAccessibility::HasAttribute(
142 WebAccessibility::Attribute attribute) {
143 return (attributes_.find(attribute) != attributes_.end());
144 }
145
146 bool BrowserAccessibility::GetAttribute(
147 WebAccessibility::Attribute attribute, string16* value) {
148 std::map<int32, string16>::iterator iter = attributes_.find(attribute);
149 if (iter != attributes_.end()) {
150 *value = iter->second;
151 return true;
152 }
153
154 return false;
155 }
156
157 bool BrowserAccessibility::GetAttributeAsInt(
158 WebAccessibility::Attribute attribute, int* value_int) {
159 string16 value_str;
160
161 if (!GetAttribute(attribute, &value_str))
162 return false;
163
164 if (!base::StringToInt(value_str, value_int))
165 return false;
166
167 return true;
168 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698