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

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

Issue 15741009: Native Android accessibility. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 7 years, 6 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
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.h" 5 #include "content/browser/accessibility/browser_accessibility_manager.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "content/browser/accessibility/browser_accessibility.h" 8 #include "content/browser/accessibility/browser_accessibility.h"
9 #include "content/browser/accessibility/browser_accessibility_state_impl.h" 9 #include "content/browser/accessibility/browser_accessibility_state_impl.h"
10 #include "content/common/accessibility_messages.h" 10 #include "content/common/accessibility_messages.h"
11 11
12 namespace content { 12 namespace content {
13 13
14 BrowserAccessibility* BrowserAccessibilityFactory::Create() { 14 BrowserAccessibility* BrowserAccessibilityFactory::Create() {
15 return BrowserAccessibility::Create(); 15 return BrowserAccessibility::Create();
16 } 16 }
17 17
18 #if !defined(OS_MACOSX) && \ 18 #if !defined(OS_MACOSX) && \
19 !defined(OS_WIN) && \ 19 !defined(OS_WIN) && \
20 !defined(TOOLKIT_GTK) 20 !defined(TOOLKIT_GTK) && \
21 !defined(OS_ANDROID) \
21 // We have subclassess of BrowserAccessibilityManager on Mac, Linux/GTK, 22 // We have subclassess of BrowserAccessibilityManager on Mac, Linux/GTK,
22 // and Win. For any other platform, instantiate the base class. 23 // and Win. For any other platform, instantiate the base class.
23 // static 24 // static
24 BrowserAccessibilityManager* BrowserAccessibilityManager::Create( 25 BrowserAccessibilityManager* BrowserAccessibilityManager::Create(
25 const AccessibilityNodeData& src, 26 const AccessibilityNodeData& src,
26 BrowserAccessibilityDelegate* delegate, 27 BrowserAccessibilityDelegate* delegate,
27 BrowserAccessibilityFactory* factory) { 28 BrowserAccessibilityFactory* factory) {
28 return new BrowserAccessibilityManager(src, delegate, factory); 29 return new BrowserAccessibilityManager(src, delegate, factory);
29 } 30 }
30 #endif 31 #endif
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 } 85 }
85 86
86 bool BrowserAccessibilityManager::IsOSKAllowed(const gfx::Rect& bounds) { 87 bool BrowserAccessibilityManager::IsOSKAllowed(const gfx::Rect& bounds) {
87 if (!delegate_ || !delegate_->HasFocus()) 88 if (!delegate_ || !delegate_->HasFocus())
88 return false; 89 return false;
89 90
90 gfx::Point touch_point = delegate_->GetLastTouchEventLocation(); 91 gfx::Point touch_point = delegate_->GetLastTouchEventLocation();
91 return bounds.Contains(touch_point); 92 return bounds.Contains(touch_point);
92 } 93 }
93 94
95 bool BrowserAccessibilityManager::UseRootScrollOffsetsWhenComputingBounds() {
96 return true;
97 }
98
94 void BrowserAccessibilityManager::RemoveNode(BrowserAccessibility* node) { 99 void BrowserAccessibilityManager::RemoveNode(BrowserAccessibility* node) {
95 if (node == focus_) 100 if (node == focus_)
96 SetFocus(root_, false); 101 SetFocus(root_, false);
97 int renderer_id = node->renderer_id(); 102 int renderer_id = node->renderer_id();
98 renderer_id_map_.erase(renderer_id); 103 renderer_id_map_.erase(renderer_id);
99 } 104 }
100 105
101 void BrowserAccessibilityManager::OnAccessibilityNotifications( 106 void BrowserAccessibilityManager::OnAccessibilityNotifications(
102 const std::vector<AccessibilityHostMsg_NotificationParams>& params) { 107 const std::vector<AccessibilityHostMsg_NotificationParams>& params) {
103 for (uint32 index = 0; index < params.size(); index++) { 108 for (uint32 index = 0; index < params.size(); index++) {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 156
152 void BrowserAccessibilityManager::SetFocus( 157 void BrowserAccessibilityManager::SetFocus(
153 BrowserAccessibility* node, bool notify) { 158 BrowserAccessibility* node, bool notify) {
154 if (focus_ != node) 159 if (focus_ != node)
155 focus_ = node; 160 focus_ = node;
156 161
157 if (notify && node && delegate_) 162 if (notify && node && delegate_)
158 delegate_->SetAccessibilityFocus(node->renderer_id()); 163 delegate_->SetAccessibilityFocus(node->renderer_id());
159 } 164 }
160 165
166 void BrowserAccessibilityManager::SetRoot(BrowserAccessibility* node) {
167 root_ = node;
168 NotifyRootChanged();
169 }
170
161 void BrowserAccessibilityManager::DoDefaultAction( 171 void BrowserAccessibilityManager::DoDefaultAction(
162 const BrowserAccessibility& node) { 172 const BrowserAccessibility& node) {
163 if (delegate_) 173 if (delegate_)
164 delegate_->AccessibilityDoDefaultAction(node.renderer_id()); 174 delegate_->AccessibilityDoDefaultAction(node.renderer_id());
165 } 175 }
166 176
167 void BrowserAccessibilityManager::ScrollToMakeVisible( 177 void BrowserAccessibilityManager::ScrollToMakeVisible(
168 const BrowserAccessibility& node, gfx::Rect subfocus) { 178 const BrowserAccessibility& node, gfx::Rect subfocus) {
169 if (delegate_) { 179 if (delegate_) {
170 delegate_->AccessibilityScrollToMakeVisible(node.renderer_id(), subfocus); 180 delegate_->AccessibilityScrollToMakeVisible(node.renderer_id(), subfocus);
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 375
366 // Finally, swap in the new children vector for the old. 376 // Finally, swap in the new children vector for the old.
367 instance->SwapChildren(new_children); 377 instance->SwapChildren(new_children);
368 378
369 // Handle the case where this node is the new root of the tree. 379 // Handle the case where this node is the new root of the tree.
370 if (src.role == AccessibilityNodeData::ROLE_ROOT_WEB_AREA && 380 if (src.role == AccessibilityNodeData::ROLE_ROOT_WEB_AREA &&
371 (!root_ || root_->renderer_id() != src.id)) { 381 (!root_ || root_->renderer_id() != src.id)) {
372 if (root_) 382 if (root_)
373 root_->Destroy(); 383 root_->Destroy();
374 if (focus_ == root_) 384 if (focus_ == root_)
375 focus_ = instance; 385 SetFocus(instance, false);
376 root_ = instance; 386 SetRoot(instance);
377 } 387 }
378 388
379 // Keep track of what node is focused. 389 // Keep track of what node is focused.
380 if ((src.state >> AccessibilityNodeData::STATE_FOCUSED) & 1) 390 if (src.role != AccessibilityNodeData::ROLE_ROOT_WEB_AREA &&
391 src.role != AccessibilityNodeData::ROLE_WEB_AREA &&
392 (src.state >> AccessibilityNodeData::STATE_FOCUSED & 1)) {
381 SetFocus(instance, false); 393 SetFocus(instance, false);
382 394 }
383 return success; 395 return success;
384 } 396 }
385 397
386 } // namespace content 398 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698