diff --git a/content/browser/accessibility/browser_accessibility_ohos.cc b/content/browser/accessibility/browser_accessibility_ohos.cc index 6e92903056a36c42b36e4cbe84ac8a064343a1b3..50bb37ba65504f9d6f489f75128c47d9626b8b6a 100644 --- a/content/browser/accessibility/browser_accessibility_ohos.cc +++ b/content/browser/accessibility/browser_accessibility_ohos.cc @@ -16,6 +16,7 @@ #include "content/browser/accessibility/browser_accessibility_ohos.h" #include #include +#include #include "content/browser/accessibility/browser_accessibility_manager_ohos.h" #include "content/public/common/content_client.h" #include "ohos_nweb/src/cef_delegate/nweb_accessibility_utils.h" @@ -30,6 +31,7 @@ using AccessibilityIdMap = std::unordered_map; base::LazyInstance::Leaky g_accessibility_id_map = LAZY_INSTANCE_INITIALIZER; +std::mutex g_accessibility_id_map_lock; std::unique_ptr BrowserAccessibility::Create( BrowserAccessibilityManager* manager, @@ -42,13 +44,19 @@ BrowserAccessibilityOHOS::BrowserAccessibilityOHOS( BrowserAccessibilityManager* manager, ui::AXNode* node) : BrowserAccessibility(manager, node) { + std::unique_lock lock(g_accessibility_id_map_lock); accessibility_id_ = BrowserAccessibilityManagerOHOS::GenerateAccessibilityId(); - g_accessibility_id_map.Get()[accessibility_id_] = this; + if (accessibility_id_ >= 0) { + g_accessibility_id_map.Get()[accessibility_id_] = this; + } } BrowserAccessibilityOHOS::~BrowserAccessibilityOHOS() { - g_accessibility_id_map.Get().erase(accessibility_id_); + std::unique_lock lock(g_accessibility_id_map_lock); + if (accessibility_id_ >= 0) { + g_accessibility_id_map.Get().erase(accessibility_id_); + } } int32_t BrowserAccessibilityOHOS::GetAccessibilityId() const { @@ -381,6 +389,7 @@ bool BrowserAccessibilityOHOS::IsHierarchical() const { BrowserAccessibilityOHOS* BrowserAccessibilityOHOS::GetFromAccessibilityId( int32_t accessibility_id) { + std::unique_lock lock(g_accessibility_id_map_lock); AccessibilityIdMap* accessibility_ids = g_accessibility_id_map.Pointer(); auto iter = accessibility_ids->find(accessibility_id); if (iter != accessibility_ids->end())