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

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

Issue 2981083002: Migrate BrowserAccessibility windows unique id handling to AXPlatformNodeWin. (Closed)
Patch Set: Use after free no more Created 3 years, 4 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_android.h" 5 #include "content/browser/accessibility/browser_accessibility_android.h"
6 6
7 #include "base/containers/hash_tables.h"
7 #include "base/i18n/break_iterator.h" 8 #include "base/i18n/break_iterator.h"
9 #include "base/lazy_instance.h"
8 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
9 #include "base/strings/string_util.h" 11 #include "base/strings/string_util.h"
10 #include "base/strings/stringprintf.h" 12 #include "base/strings/stringprintf.h"
11 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
12 #include "content/app/strings/grit/content_strings.h" 14 #include "content/app/strings/grit/content_strings.h"
13 #include "content/browser/accessibility/browser_accessibility_manager_android.h" 15 #include "content/browser/accessibility/browser_accessibility_manager_android.h"
14 #include "content/common/accessibility_messages.h" 16 #include "content/common/accessibility_messages.h"
15 #include "content/public/common/content_client.h" 17 #include "content/public/common/content_client.h"
16 #include "third_party/skia/include/core/SkColor.h" 18 #include "third_party/skia/include/core/SkColor.h"
17 #include "ui/accessibility/ax_role_properties.h" 19 #include "ui/accessibility/ax_role_properties.h"
18 #include "ui/accessibility/platform/ax_android_constants.h" 20 #include "ui/accessibility/platform/ax_android_constants.h"
21 #include "ui/accessibility/platform/ax_platform_unique_id.h"
19 #include "ui/accessibility/platform/ax_snapshot_node_android_platform.h" 22 #include "ui/accessibility/platform/ax_snapshot_node_android_platform.h"
20 23
21 namespace aria_strings { 24 namespace aria_strings {
22 const char kAriaLivePolite[] = "polite"; 25 const char kAriaLivePolite[] = "polite";
23 const char kAriaLiveAssertive[] = "assertive"; 26 const char kAriaLiveAssertive[] = "assertive";
24 } 27 }
25 28
26 namespace { 29 namespace {
27 30
28 // These are enums from android.text.InputType in Java: 31 // These are enums from android.text.InputType in Java:
(...skipping 26 matching lines...) Expand all
55 58
56 } // namespace 59 } // namespace
57 60
58 namespace content { 61 namespace content {
59 62
60 // static 63 // static
61 BrowserAccessibility* BrowserAccessibility::Create() { 64 BrowserAccessibility* BrowserAccessibility::Create() {
62 return new BrowserAccessibilityAndroid(); 65 return new BrowserAccessibilityAndroid();
63 } 66 }
64 67
65 BrowserAccessibilityAndroid::BrowserAccessibilityAndroid() { 68 using UniqueIdMap = base::hash_map<int32_t, BrowserAccessibilityAndroid*>;
69 // Map from each AXPlatformNode's unique id to its instance.
70 base::LazyInstance<UniqueIdMap>::DestructorAtExit g_unique_id_map =
71 LAZY_INSTANCE_INITIALIZER;
72
73 // static
74 BrowserAccessibilityAndroid* BrowserAccessibilityAndroid::GetFromUniqueId(
75 int32_t unique_id) {
76 UniqueIdMap* unique_ids = g_unique_id_map.Pointer();
77 auto iter = unique_ids->find(unique_id);
78 if (iter != unique_ids->end())
79 return iter->second;
80
81 return nullptr;
82 }
83
84 BrowserAccessibilityAndroid::BrowserAccessibilityAndroid()
85 : unique_id_(ui::GetNextAXPlatformNodeUniqueId()) {
86 g_unique_id_map.Get()[unique_id_] = this;
66 first_time_ = true; 87 first_time_ = true;
67 } 88 }
68 89
90 BrowserAccessibilityAndroid::~BrowserAccessibilityAndroid() {
91 if (unique_id_)
92 g_unique_id_map.Get().erase(unique_id_);
93 }
94
69 bool BrowserAccessibilityAndroid::IsNative() const { 95 bool BrowserAccessibilityAndroid::IsNative() const {
70 return true; 96 return true;
71 } 97 }
72 98
73 void BrowserAccessibilityAndroid::OnLocationChanged() { 99 void BrowserAccessibilityAndroid::OnLocationChanged() {
74 manager()->NotifyAccessibilityEvent( 100 manager()->NotifyAccessibilityEvent(
75 BrowserAccessibilityEvent::FromTreeChange, 101 BrowserAccessibilityEvent::FromTreeChange,
76 ui::AX_EVENT_LOCATION_CHANGED, 102 ui::AX_EVENT_LOCATION_CHANGED,
77 this); 103 this);
78 } 104 }
(...skipping 1330 matching lines...) Expand 10 before | Expand all | Expand 10 after
1409 int BrowserAccessibilityAndroid::CountChildrenWithRole(ui::AXRole role) const { 1435 int BrowserAccessibilityAndroid::CountChildrenWithRole(ui::AXRole role) const {
1410 int count = 0; 1436 int count = 0;
1411 for (uint32_t i = 0; i < PlatformChildCount(); i++) { 1437 for (uint32_t i = 0; i < PlatformChildCount(); i++) {
1412 if (PlatformGetChild(i)->GetRole() == role) 1438 if (PlatformGetChild(i)->GetRole() == role)
1413 count++; 1439 count++;
1414 } 1440 }
1415 return count; 1441 return count;
1416 } 1442 }
1417 1443
1418 } // namespace content 1444 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698