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

Side by Side Diff: content/browser/accessibility/browser_accessibility_manager_win.cc

Issue 116293005: Refactor content/ to use ui::AXNodeData instead of blink. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update content/DEPS instead of subdirs Created 6 years, 11 months 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/accessibility/browser_accessibility_manager_win.h" 5 #include "content/browser/accessibility/browser_accessibility_manager_win.h"
6 6
7 #include <atlbase.h> 7 #include <atlbase.h>
8 #include <atlapp.h> 8 #include <atlapp.h>
9 #include <atlcom.h> 9 #include <atlcom.h>
10 #include <atlcrack.h> 10 #include <atlcrack.h>
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 90
91 BrowserAccessibilityManagerWin* manager_; 91 BrowserAccessibilityManagerWin* manager_;
92 base::win::ScopedComPtr<IAccessible> window_accessible_; 92 base::win::ScopedComPtr<IAccessible> window_accessible_;
93 93
94 DISALLOW_COPY_AND_ASSIGN(AccessibleHWND); 94 DISALLOW_COPY_AND_ASSIGN(AccessibleHWND);
95 }; 95 };
96 96
97 97
98 // static 98 // static
99 BrowserAccessibilityManager* BrowserAccessibilityManager::Create( 99 BrowserAccessibilityManager* BrowserAccessibilityManager::Create(
100 const AccessibilityNodeData& src, 100 const ui::AXNodeData& src,
101 BrowserAccessibilityDelegate* delegate, 101 BrowserAccessibilityDelegate* delegate,
102 BrowserAccessibilityFactory* factory) { 102 BrowserAccessibilityFactory* factory) {
103 return new BrowserAccessibilityManagerWin( 103 return new BrowserAccessibilityManagerWin(
104 GetDesktopWindow(), NULL, src, delegate, factory); 104 GetDesktopWindow(), NULL, src, delegate, factory);
105 } 105 }
106 106
107 BrowserAccessibilityManagerWin* 107 BrowserAccessibilityManagerWin*
108 BrowserAccessibilityManager::ToBrowserAccessibilityManagerWin() { 108 BrowserAccessibilityManager::ToBrowserAccessibilityManagerWin() {
109 return static_cast<BrowserAccessibilityManagerWin*>(this); 109 return static_cast<BrowserAccessibilityManagerWin*>(this);
110 } 110 }
111 111
112 BrowserAccessibilityManagerWin::BrowserAccessibilityManagerWin( 112 BrowserAccessibilityManagerWin::BrowserAccessibilityManagerWin(
113 HWND parent_hwnd, 113 HWND parent_hwnd,
114 IAccessible* parent_iaccessible, 114 IAccessible* parent_iaccessible,
115 const AccessibilityNodeData& src, 115 const ui::AXNodeData& src,
116 BrowserAccessibilityDelegate* delegate, 116 BrowserAccessibilityDelegate* delegate,
117 BrowserAccessibilityFactory* factory) 117 BrowserAccessibilityFactory* factory)
118 : BrowserAccessibilityManager(src, delegate, factory), 118 : BrowserAccessibilityManager(src, delegate, factory),
119 parent_hwnd_(parent_hwnd), 119 parent_hwnd_(parent_hwnd),
120 parent_iaccessible_(parent_iaccessible), 120 parent_iaccessible_(parent_iaccessible),
121 tracked_scroll_object_(NULL), 121 tracked_scroll_object_(NULL),
122 is_chrome_frame_( 122 is_chrome_frame_(
123 CommandLine::ForCurrentProcess()->HasSwitch("chrome-frame")), 123 CommandLine::ForCurrentProcess()->HasSwitch("chrome-frame")),
124 accessible_hwnd_(NULL) { 124 accessible_hwnd_(NULL) {
125 } 125 }
126 126
127 BrowserAccessibilityManagerWin::~BrowserAccessibilityManagerWin() { 127 BrowserAccessibilityManagerWin::~BrowserAccessibilityManagerWin() {
128 if (tracked_scroll_object_) { 128 if (tracked_scroll_object_) {
129 tracked_scroll_object_->Release(); 129 tracked_scroll_object_->Release();
130 tracked_scroll_object_ = NULL; 130 tracked_scroll_object_ = NULL;
131 } 131 }
132 if (accessible_hwnd_) 132 if (accessible_hwnd_)
133 accessible_hwnd_->OnManagerDeleted(); 133 accessible_hwnd_->OnManagerDeleted();
134 } 134 }
135 135
136 // static 136 // static
137 AccessibilityNodeData BrowserAccessibilityManagerWin::GetEmptyDocument() { 137 ui::AXNodeData BrowserAccessibilityManagerWin::GetEmptyDocument() {
138 AccessibilityNodeData empty_document; 138 ui::AXNodeData empty_document;
139 empty_document.id = 0; 139 empty_document.id = 0;
140 empty_document.role = blink::WebAXRoleRootWebArea; 140 empty_document.role = ui::AX_ROLE_ROOT_WEB_AREA;
141 empty_document.state = 141 empty_document.state =
142 (1 << blink::WebAXStateEnabled) | 142 (1 << blink::WebAXStateEnabled) |
143 (1 << blink::WebAXStateReadonly) | 143 (1 << ui::AX_STATE_READONLY) |
144 (1 << blink::WebAXStateBusy); 144 (1 << ui::AX_STATE_BUSY);
145 return empty_document; 145 return empty_document;
146 } 146 }
147 147
148 void BrowserAccessibilityManagerWin::MaybeCallNotifyWinEvent(DWORD event, 148 void BrowserAccessibilityManagerWin::MaybeCallNotifyWinEvent(DWORD event,
149 LONG child_id) { 149 LONG child_id) {
150 // Don't fire events if this view isn't hooked up to its parent. 150 // Don't fire events if this view isn't hooked up to its parent.
151 if (!parent_iaccessible()) 151 if (!parent_iaccessible())
152 return; 152 return;
153 153
154 #if defined(USE_AURA) 154 #if defined(USE_AURA)
(...skipping 22 matching lines...) Expand all
177 unique_id_to_renderer_id_map_.erase( 177 unique_id_to_renderer_id_map_.erase(
178 node->ToBrowserAccessibilityWin()->unique_id_win()); 178 node->ToBrowserAccessibilityWin()->unique_id_win());
179 BrowserAccessibilityManager::RemoveNode(node); 179 BrowserAccessibilityManager::RemoveNode(node);
180 if (node == tracked_scroll_object_) { 180 if (node == tracked_scroll_object_) {
181 tracked_scroll_object_->Release(); 181 tracked_scroll_object_->Release();
182 tracked_scroll_object_ = NULL; 182 tracked_scroll_object_ = NULL;
183 } 183 }
184 } 184 }
185 185
186 void BrowserAccessibilityManagerWin::NotifyAccessibilityEvent( 186 void BrowserAccessibilityManagerWin::NotifyAccessibilityEvent(
187 blink::WebAXEvent event_type, 187 ui::AXEvent event_type,
188 BrowserAccessibility* node) { 188 BrowserAccessibility* node) {
189 if (node->role() == blink::WebAXRoleInlineTextBox) 189 if (node->role() == ui::AX_ROLE_INLINE_TEXT_BOX)
190 return; 190 return;
191 191
192 LONG event_id = EVENT_MIN; 192 LONG event_id = EVENT_MIN;
193 switch (event_type) { 193 switch (event_type) {
194 case blink::WebAXEventActiveDescendantChanged: 194 case ui::AX_EVENT_ACTIVEDESCENDANTCHANGED:
195 event_id = IA2_EVENT_ACTIVE_DESCENDANT_CHANGED; 195 event_id = IA2_EVENT_ACTIVE_DESCENDANT_CHANGED;
196 break; 196 break;
197 case blink::WebAXEventAlert: 197 case ui::AX_EVENT_ALERT:
198 event_id = EVENT_SYSTEM_ALERT; 198 event_id = EVENT_SYSTEM_ALERT;
199 break; 199 break;
200 case blink::WebAXEventAriaAttributeChanged: 200 case ui::AX_EVENT_ARIA_ATTRIBUTE_CHANGED:
201 event_id = IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED; 201 event_id = IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED;
202 break; 202 break;
203 case blink::WebAXEventAutocorrectionOccured: 203 case ui::AX_EVENT_AUTOCORRECTION_OCCURED:
204 event_id = IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED; 204 event_id = IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED;
205 break; 205 break;
206 case blink::WebAXEventBlur: 206 case ui::AX_EVENT_BLUR:
207 // Equivalent to focus on the root. 207 // Equivalent to focus on the root.
208 event_id = EVENT_OBJECT_FOCUS; 208 event_id = EVENT_OBJECT_FOCUS;
209 node = GetRoot(); 209 node = GetRoot();
210 break; 210 break;
211 case blink::WebAXEventCheckedStateChanged: 211 case ui::AX_EVENT_CHECKED_STATE_CHANGED:
212 event_id = EVENT_OBJECT_STATECHANGE; 212 event_id = EVENT_OBJECT_STATECHANGE;
213 break; 213 break;
214 case blink::WebAXEventChildrenChanged: 214 case ui::AX_EVENT_CHILDREN_CHANGED:
215 event_id = EVENT_OBJECT_REORDER; 215 event_id = EVENT_OBJECT_REORDER;
216 break; 216 break;
217 case blink::WebAXEventFocus: 217 case ui::AX_EVENT_FOCUS:
218 event_id = EVENT_OBJECT_FOCUS; 218 event_id = EVENT_OBJECT_FOCUS;
219 break; 219 break;
220 case blink::WebAXEventInvalidStatusChanged: 220 case ui::AX_EVENT_INVALID_STATUS_CHANGED:
221 event_id = EVENT_OBJECT_STATECHANGE; 221 event_id = EVENT_OBJECT_STATECHANGE;
222 break; 222 break;
223 case blink::WebAXEventLiveRegionChanged: 223 case ui::AX_EVENT_LIVE_REGION_CHANGED:
224 // TODO: try not firing a native notification at all, since 224 // TODO: try not firing a native notification at all, since
225 // on Windows, each individual item in a live region that changes 225 // on Windows, each individual item in a live region that changes
226 // already gets its own notification. 226 // already gets its own notification.
227 event_id = EVENT_OBJECT_REORDER; 227 event_id = EVENT_OBJECT_REORDER;
228 break; 228 break;
229 case blink::WebAXEventLoadComplete: 229 case ui::AX_EVENT_LOAD_COMPLETE:
230 event_id = IA2_EVENT_DOCUMENT_LOAD_COMPLETE; 230 event_id = IA2_EVENT_DOCUMENT_LOAD_COMPLETE;
231 break; 231 break;
232 case blink::WebAXEventMenuListItemSelected: 232 case ui::AX_EVENT_MENU_LIST_ITEM_SELECTED:
233 event_id = EVENT_OBJECT_FOCUS; 233 event_id = EVENT_OBJECT_FOCUS;
234 break; 234 break;
235 case blink::WebAXEventMenuListValueChanged: 235 case ui::AX_EVENT_MENU_LIST_VALUE_CHANGED:
236 event_id = EVENT_OBJECT_VALUECHANGE; 236 event_id = EVENT_OBJECT_VALUECHANGE;
237 break; 237 break;
238 case blink::WebAXEventHide: 238 case ui::AX_EVENT_HIDE:
239 event_id = EVENT_OBJECT_HIDE; 239 event_id = EVENT_OBJECT_HIDE;
240 break; 240 break;
241 case blink::WebAXEventShow: 241 case ui::AX_EVENT_SHOW:
242 event_id = EVENT_OBJECT_SHOW; 242 event_id = EVENT_OBJECT_SHOW;
243 break; 243 break;
244 case blink::WebAXEventScrolledToAnchor: 244 case ui::AX_EVENT_SCROLLED_TO_ANCHOR:
245 event_id = EVENT_SYSTEM_SCROLLINGSTART; 245 event_id = EVENT_SYSTEM_SCROLLINGSTART;
246 break; 246 break;
247 case blink::WebAXEventSelectedChildrenChanged: 247 case ui::AX_EVENT_SELECTED_CHILDREN_CHANGED:
248 event_id = EVENT_OBJECT_SELECTIONWITHIN; 248 event_id = EVENT_OBJECT_SELECTIONWITHIN;
249 break; 249 break;
250 case blink::WebAXEventSelectedTextChanged: 250 case ui::AX_EVENT_SELECTED_TEXT_CHANGED:
251 event_id = IA2_EVENT_TEXT_CARET_MOVED; 251 event_id = IA2_EVENT_TEXT_CARET_MOVED;
252 break; 252 break;
253 case blink::WebAXEventTextChanged: 253 case ui::AX_EVENT_TEXT_CHANGED:
254 event_id = EVENT_OBJECT_NAMECHANGE; 254 event_id = EVENT_OBJECT_NAMECHANGE;
255 break; 255 break;
256 case blink::WebAXEventTextInserted: 256 case ui::AX_EVENT_TEXT_INSERTED:
257 event_id = IA2_EVENT_TEXT_INSERTED; 257 event_id = IA2_EVENT_TEXT_INSERTED;
258 break; 258 break;
259 case blink::WebAXEventTextRemoved: 259 case ui::AX_EVENT_TEXT_REMOVED:
260 event_id = IA2_EVENT_TEXT_REMOVED; 260 event_id = IA2_EVENT_TEXT_REMOVED;
261 break; 261 break;
262 case blink::WebAXEventValueChanged: 262 case ui::AX_EVENT_VALUE_CHANGED:
263 event_id = EVENT_OBJECT_VALUECHANGE; 263 event_id = EVENT_OBJECT_VALUECHANGE;
264 break; 264 break;
265 default: 265 default:
266 // Not all WebKit accessibility events result in a Windows 266 // Not all WebKit accessibility events result in a Windows
267 // accessibility notification. 267 // accessibility notification.
268 break; 268 break;
269 } 269 }
270 270
271 if (event_id != EVENT_MIN) { 271 if (event_id != EVENT_MIN) {
272 // Pass the node's unique id in the |child_id| argument to NotifyWinEvent; 272 // Pass the node's unique id in the |child_id| argument to NotifyWinEvent;
273 // the AT client will then call get_accChild on the HWND's accessibility 273 // the AT client will then call get_accChild on the HWND's accessibility
274 // object and pass it that same id, which we can use to retrieve the 274 // object and pass it that same id, which we can use to retrieve the
275 // IAccessible for this node. 275 // IAccessible for this node.
276 LONG child_id = node->ToBrowserAccessibilityWin()->unique_id_win(); 276 LONG child_id = node->ToBrowserAccessibilityWin()->unique_id_win();
277 MaybeCallNotifyWinEvent(event_id, child_id); 277 MaybeCallNotifyWinEvent(event_id, child_id);
278 } 278 }
279 279
280 // If this is a layout complete notification (sent when a container scrolls) 280 // If this is a layout complete notification (sent when a container scrolls)
281 // and there is a descendant tracked object, send a notification on it. 281 // and there is a descendant tracked object, send a notification on it.
282 // TODO(dmazzoni): remove once http://crbug.com/113483 is fixed. 282 // TODO(dmazzoni): remove once http://crbug.com/113483 is fixed.
283 if (event_type == blink::WebAXEventLayoutComplete && 283 if (event_type == ui::AX_EVENT_LAYOUT_COMPLETE &&
284 tracked_scroll_object_ && 284 tracked_scroll_object_ &&
285 tracked_scroll_object_->IsDescendantOf(node)) { 285 tracked_scroll_object_->IsDescendantOf(node)) {
286 MaybeCallNotifyWinEvent( 286 MaybeCallNotifyWinEvent(
287 IA2_EVENT_VISIBLE_DATA_CHANGED, 287 IA2_EVENT_VISIBLE_DATA_CHANGED,
288 tracked_scroll_object_->ToBrowserAccessibilityWin()->unique_id_win()); 288 tracked_scroll_object_->ToBrowserAccessibilityWin()->unique_id_win());
289 tracked_scroll_object_->Release(); 289 tracked_scroll_object_->Release();
290 tracked_scroll_object_ = NULL; 290 tracked_scroll_object_ = NULL;
291 } 291 }
292 } 292 }
293 293
(...skipping 22 matching lines...) Expand all
316 // |parent_iaccessible_| are no longer valid either, since they were 316 // |parent_iaccessible_| are no longer valid either, since they were
317 // derived from AccessibleHWND. We don't have to restore them to 317 // derived from AccessibleHWND. We don't have to restore them to
318 // previous values, though, because this should only happen 318 // previous values, though, because this should only happen
319 // during the destruct sequence for this window. 319 // during the destruct sequence for this window.
320 accessible_hwnd_ = NULL; 320 accessible_hwnd_ = NULL;
321 parent_hwnd_ = NULL; 321 parent_hwnd_ = NULL;
322 parent_iaccessible_ = NULL; 322 parent_iaccessible_ = NULL;
323 } 323 }
324 324
325 } // namespace content 325 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698