Skip to content

Commit ced1644

Browse files
author
Evan Stade
committed
AXAuraObjCache - clear focus client reference when window is destroyed
BUG=591752 Review URL: https://codereview.chromium.org/1765583002 Cr-Commit-Position: refs/heads/master@{#379087} (cherry picked from commit 3913fbd) Review URL: https://codereview.chromium.org/1767383002 . Cr-Commit-Position: refs/branch-heads/2661@{crosswalk-project#121} Cr-Branched-From: ef6f6ae-refs/heads/master@{#378081}
1 parent 5e0ad74 commit ced1644

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

ui/views/accessibility/ax_aura_obj_cache.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ AXAuraObjWrapper* AXAuraObjCache::GetOrCreate(aura::Window* window) {
3535
aura::Window* root_window = window->GetRootWindow();
3636
if (root_window) {
3737
focus_client_ = aura::client::GetFocusClient(root_window);
38+
root_window->AddObserver(this);
3839
if (focus_client_)
3940
focus_client_->AddObserver(this);
4041
}
@@ -159,6 +160,10 @@ void AXAuraObjCache::OnWindowFocused(aura::Window* gained_focus,
159160
view->NotifyAccessibilityEvent(ui::AX_EVENT_FOCUS, true);
160161
}
161162

163+
void AXAuraObjCache::OnWindowDestroying(aura::Window* window) {
164+
focus_client_ = nullptr;
165+
}
166+
162167
template <typename AuraViewWrapper, typename AuraView>
163168
AXAuraObjWrapper* AXAuraObjCache::CreateInternal(
164169
AuraView* aura_view,

ui/views/accessibility/ax_aura_obj_cache.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include "base/macros.h"
1414
#include "ui/aura/client/focus_change_observer.h"
15+
#include "ui/aura/window_observer.h"
1516
#include "ui/views/views_export.h"
1617

1718
namespace base {
@@ -32,7 +33,8 @@ class Widget;
3233

3334
// A cache responsible for assigning id's to a set of interesting Aura views.
3435
class VIEWS_EXPORT AXAuraObjCache
35-
: public aura::client::FocusChangeObserver {
36+
: public aura::client::FocusChangeObserver,
37+
public aura::WindowObserver {
3638
public:
3739
// Get the single instance of this class.
3840
static AXAuraObjCache* GetInstance();
@@ -86,6 +88,9 @@ class VIEWS_EXPORT AXAuraObjCache
8688
void OnWindowFocused(aura::Window* gained_focus,
8789
aura::Window* lost_focus) override;
8890

91+
// aura::WindowObserver override.
92+
void OnWindowDestroying(aura::Window* window) override;
93+
8994
template <typename AuraViewWrapper, typename AuraView>
9095
AXAuraObjWrapper* CreateInternal(
9196
AuraView* aura_view,

0 commit comments

Comments
 (0)