OLD | NEW |
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 <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/win/scoped_comptr.h" | 10 #include "base/win/scoped_comptr.h" |
11 #include "base/win/windows_version.h" | 11 #include "base/win/windows_version.h" |
12 #include "content/browser/accessibility/browser_accessibility_state_impl.h" | 12 #include "content/browser/accessibility/browser_accessibility_state_impl.h" |
13 #include "content/browser/accessibility/browser_accessibility_win.h" | 13 #include "content/browser/accessibility/browser_accessibility_win.h" |
14 #include "content/browser/renderer_host/legacy_render_widget_host_win.h" | 14 #include "content/browser/renderer_host/legacy_render_widget_host_win.h" |
15 #include "content/common/accessibility_messages.h" | 15 #include "content/common/accessibility_messages.h" |
16 #include "ui/base/win/atl_module.h" | 16 #include "ui/base/win/atl_module.h" |
17 | 17 |
18 namespace content { | 18 namespace content { |
19 | 19 |
20 // static | 20 // static |
21 BrowserAccessibilityManager* BrowserAccessibilityManager::Create( | 21 BrowserAccessibilityManager* BrowserAccessibilityManager::Create( |
22 const SimpleAXTreeUpdate& initial_tree, | 22 const ui::AXTreeUpdate& initial_tree, |
23 BrowserAccessibilityDelegate* delegate, | 23 BrowserAccessibilityDelegate* delegate, |
24 BrowserAccessibilityFactory* factory) { | 24 BrowserAccessibilityFactory* factory) { |
25 return new BrowserAccessibilityManagerWin(initial_tree, delegate, factory); | 25 return new BrowserAccessibilityManagerWin(initial_tree, delegate, factory); |
26 } | 26 } |
27 | 27 |
28 BrowserAccessibilityManagerWin* | 28 BrowserAccessibilityManagerWin* |
29 BrowserAccessibilityManager::ToBrowserAccessibilityManagerWin() { | 29 BrowserAccessibilityManager::ToBrowserAccessibilityManagerWin() { |
30 return static_cast<BrowserAccessibilityManagerWin*>(this); | 30 return static_cast<BrowserAccessibilityManagerWin*>(this); |
31 } | 31 } |
32 | 32 |
33 BrowserAccessibilityManagerWin::BrowserAccessibilityManagerWin( | 33 BrowserAccessibilityManagerWin::BrowserAccessibilityManagerWin( |
34 const SimpleAXTreeUpdate& initial_tree, | 34 const ui::AXTreeUpdate& initial_tree, |
35 BrowserAccessibilityDelegate* delegate, | 35 BrowserAccessibilityDelegate* delegate, |
36 BrowserAccessibilityFactory* factory) | 36 BrowserAccessibilityFactory* factory) |
37 : BrowserAccessibilityManager(delegate, factory), | 37 : BrowserAccessibilityManager(delegate, factory), |
38 tracked_scroll_object_(NULL), | 38 tracked_scroll_object_(NULL), |
39 focus_event_on_root_needed_(false), | 39 focus_event_on_root_needed_(false), |
40 inside_on_window_focused_(false) { | 40 inside_on_window_focused_(false) { |
41 ui::win::CreateATLModuleIfNeeded(); | 41 ui::win::CreateATLModuleIfNeeded(); |
42 Initialize(initial_tree); | 42 Initialize(initial_tree); |
43 } | 43 } |
44 | 44 |
45 BrowserAccessibilityManagerWin::~BrowserAccessibilityManagerWin() { | 45 BrowserAccessibilityManagerWin::~BrowserAccessibilityManagerWin() { |
46 if (tracked_scroll_object_) { | 46 if (tracked_scroll_object_) { |
47 tracked_scroll_object_->Release(); | 47 tracked_scroll_object_->Release(); |
48 tracked_scroll_object_ = NULL; | 48 tracked_scroll_object_ = NULL; |
49 } | 49 } |
50 } | 50 } |
51 | 51 |
52 // static | 52 // static |
53 SimpleAXTreeUpdate | 53 ui::AXTreeUpdate |
54 BrowserAccessibilityManagerWin::GetEmptyDocument() { | 54 BrowserAccessibilityManagerWin::GetEmptyDocument() { |
55 ui::AXNodeData empty_document; | 55 ui::AXNodeData empty_document; |
56 empty_document.id = 0; | 56 empty_document.id = 0; |
57 empty_document.role = ui::AX_ROLE_ROOT_WEB_AREA; | 57 empty_document.role = ui::AX_ROLE_ROOT_WEB_AREA; |
58 empty_document.state = | 58 empty_document.state = |
59 (1 << ui::AX_STATE_ENABLED) | | 59 (1 << ui::AX_STATE_ENABLED) | |
60 (1 << ui::AX_STATE_READ_ONLY) | | 60 (1 << ui::AX_STATE_READ_ONLY) | |
61 (1 << ui::AX_STATE_BUSY); | 61 (1 << ui::AX_STATE_BUSY); |
62 | 62 |
63 SimpleAXTreeUpdate update; | 63 ui::AXTreeUpdate update; |
64 update.nodes.push_back(empty_document); | 64 update.nodes.push_back(empty_document); |
65 return update; | 65 return update; |
66 } | 66 } |
67 | 67 |
68 HWND BrowserAccessibilityManagerWin::GetParentHWND() { | 68 HWND BrowserAccessibilityManagerWin::GetParentHWND() { |
69 if (!delegate_) | 69 if (!delegate_) |
70 return NULL; | 70 return NULL; |
71 return delegate_->AccessibilityGetAcceleratedWidget(); | 71 return delegate_->AccessibilityGetAcceleratedWidget(); |
72 } | 72 } |
73 | 73 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 (!delegate_->AccessibilityViewHasFocus())) { | 115 (!delegate_->AccessibilityViewHasFocus())) { |
116 return; | 116 return; |
117 } | 117 } |
118 | 118 |
119 // NVDA gets confused if we focus the main document element when it hasn't | 119 // NVDA gets confused if we focus the main document element when it hasn't |
120 // finished loading and it has no children at all, so suppress that event. | 120 // finished loading and it has no children at all, so suppress that event. |
121 if (event == EVENT_OBJECT_FOCUS && | 121 if (event == EVENT_OBJECT_FOCUS && |
122 node == GetRoot() && | 122 node == GetRoot() && |
123 node->PlatformChildCount() == 0 && | 123 node->PlatformChildCount() == 0 && |
124 !node->HasState(ui::AX_STATE_BUSY) && | 124 !node->HasState(ui::AX_STATE_BUSY) && |
125 !node->GetBoolAttribute(ui::AX_ATTR_DOC_LOADED)) { | 125 !node->manager()->GetTreeData().loaded) { |
126 return; | 126 return; |
127 } | 127 } |
128 | 128 |
129 // If a focus event is needed on the root, fire that first before | 129 // If a focus event is needed on the root, fire that first before |
130 // this event. | 130 // this event. |
131 if (event == EVENT_OBJECT_FOCUS && node == GetRoot()) | 131 if (event == EVENT_OBJECT_FOCUS && node == GetRoot()) |
132 focus_event_on_root_needed_ = false; | 132 focus_event_on_root_needed_ = false; |
133 else if (focus_event_on_root_needed_) | 133 else if (focus_event_on_root_needed_) |
134 OnWindowFocused(); | 134 OnWindowFocused(); |
135 | 135 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 !root_delegate->AccessibilityViewHasFocus()) { | 198 !root_delegate->AccessibilityViewHasFocus()) { |
199 return; | 199 return; |
200 } | 200 } |
201 | 201 |
202 // NVDA gets confused if we focus the main document element when it hasn't | 202 // NVDA gets confused if we focus the main document element when it hasn't |
203 // finished loading and it has no children at all, so suppress that event. | 203 // finished loading and it has no children at all, so suppress that event. |
204 if (event_type == ui::AX_EVENT_FOCUS && | 204 if (event_type == ui::AX_EVENT_FOCUS && |
205 node == GetRoot() && | 205 node == GetRoot() && |
206 node->PlatformChildCount() == 0 && | 206 node->PlatformChildCount() == 0 && |
207 !node->HasState(ui::AX_STATE_BUSY) && | 207 !node->HasState(ui::AX_STATE_BUSY) && |
208 !node->GetBoolAttribute(ui::AX_ATTR_DOC_LOADED)) { | 208 !node->manager()->GetTreeData().loaded) { |
209 return; | 209 return; |
210 } | 210 } |
211 | 211 |
212 // If a focus event is needed on the root, fire that first before | 212 // If a focus event is needed on the root, fire that first before |
213 // this event. | 213 // this event. |
214 if (event_type == ui::AX_EVENT_FOCUS && node == GetRoot()) | 214 if (event_type == ui::AX_EVENT_FOCUS && node == GetRoot()) |
215 focus_event_on_root_needed_ = false; | 215 focus_event_on_root_needed_ = false; |
216 else if (focus_event_on_root_needed_) | 216 else if (focus_event_on_root_needed_) |
217 OnWindowFocused(); | 217 OnWindowFocused(); |
218 | 218 |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 return nullptr; | 407 return nullptr; |
408 | 408 |
409 BrowserAccessibility* result = GetFromID(iter->second); | 409 BrowserAccessibility* result = GetFromID(iter->second); |
410 if (result && result->IsNative()) | 410 if (result && result->IsNative()) |
411 return result->ToBrowserAccessibilityWin(); | 411 return result->ToBrowserAccessibilityWin(); |
412 | 412 |
413 return nullptr; | 413 return nullptr; |
414 } | 414 } |
415 | 415 |
416 } // namespace content | 416 } // namespace content |
OLD | NEW |