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

Unified Diff: ui/views/accessibility/ax_aura_obj_cache.cc

Issue 1705853002: NOT FOR REVIEW. ax tree focus with debugging (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed crash Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/accessibility/ax_aura_obj_cache.h ('k') | ui/views/accessibility/ax_view_obj_wrapper.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/accessibility/ax_aura_obj_cache.cc
diff --git a/ui/views/accessibility/ax_aura_obj_cache.cc b/ui/views/accessibility/ax_aura_obj_cache.cc
index 47964bee739a40487fc24c7fc673fcfd6ad6ac15..72abde71a028195511abdb3141eaa3d754a1cb58 100644
--- a/ui/views/accessibility/ax_aura_obj_cache.cc
+++ b/ui/views/accessibility/ax_aura_obj_cache.cc
@@ -6,6 +6,7 @@
#include "base/memory/singleton.h"
#include "base/stl_util.h"
+#include "ui/aura/client/focus_client.h"
#include "ui/aura/window.h"
#include "ui/views/accessibility/ax_aura_obj_wrapper.h"
#include "ui/views/accessibility/ax_view_obj_wrapper.h"
@@ -30,6 +31,14 @@ AXAuraObjWrapper* AXAuraObjCache::GetOrCreate(Widget* widget) {
}
AXAuraObjWrapper* AXAuraObjCache::GetOrCreate(aura::Window* window) {
+ if (!focus_client_) {
+ aura::Window* root_window = window->GetRootWindow();
+ if (root_window) {
+ focus_client_ = aura::client::GetFocusClient(root_window);
+ if (focus_client_)
+ focus_client_->AddObserver(this);
+ }
+ }
return CreateInternal<AXWindowObjWrapper>(window, window_to_id_map_);
}
@@ -97,7 +106,17 @@ void AXAuraObjCache::GetTopLevelWindows(
}
}
-AXAuraObjCache::AXAuraObjCache() : current_id_(1), is_destroying_(false) {
+AXAuraObjWrapper* AXAuraObjCache::GetFocus() {
+ View* focused_view = GetFocusedView();
+ if (focused_view)
+ return GetOrCreate(focused_view);
+ return nullptr;
+}
+
+AXAuraObjCache::AXAuraObjCache()
+ : current_id_(1),
+ focus_client_(nullptr),
+ is_destroying_(false) {
}
AXAuraObjCache::~AXAuraObjCache() {
@@ -106,6 +125,40 @@ AXAuraObjCache::~AXAuraObjCache() {
cache_.clear();
}
+View* AXAuraObjCache::GetFocusedView() {
+ if (!focus_client_)
+ return nullptr;
+
+ aura::Window* focused_window = focus_client_->GetFocusedWindow();
+ if (!focused_window)
+ return nullptr;
+
+ Widget* focused_widget = Widget::GetWidgetForNativeView(focused_window);
+ while (!focused_widget) {
+ focused_window = focused_window->parent();
+ if (!focused_window)
+ break;
+
+ focused_widget = Widget::GetWidgetForNativeView(focused_window);
+ }
+
+ if (!focused_widget)
+ return nullptr;
+
+ FocusManager* focus_manager = focused_widget->GetFocusManager();
+ if (!focus_manager)
+ return nullptr;
+
+ return focus_manager->GetFocusedView();
+}
+
+void AXAuraObjCache::OnWindowFocused(aura::Window* gained_focus,
+ aura::Window* lost_focus) {
+ View* view = GetFocusedView();
+ if (view)
+ view->NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, true);
+}
+
template <typename AuraViewWrapper, typename AuraView>
AXAuraObjWrapper* AXAuraObjCache::CreateInternal(
AuraView* aura_view,
« no previous file with comments | « ui/views/accessibility/ax_aura_obj_cache.h ('k') | ui/views/accessibility/ax_view_obj_wrapper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698