diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc index d1f2c1f760c704..fb835af6960c7c 100644 --- a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc +++ b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc @@ -500,7 +500,11 @@ IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest, OverviewMode) { break; } - EXPECT_EQ("Entered window overview mode", speech_monitor_.GetNextUtterance()); + while (true) { + std::string utterance = speech_monitor_.GetNextUtterance(); + if (utterance == "Entered window overview mode") + break; + } SendKeyPress(ui::VKEY_TAB); // On Chrome OS accessibility title for tabbed browser windows contains app @@ -534,9 +538,12 @@ IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest, MAYBE_ChromeVoxShiftSearch) { // Press Search+/ to enter ChromeVox's "find in page". SendKeyPressWithSearch(ui::VKEY_OEM_2); - EXPECT_EQ(", window", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("webView", speech_monitor_.GetNextUtterance()); - EXPECT_EQ("Find in page.", speech_monitor_.GetNextUtterance()); + + while (true) { + std::string utterance = speech_monitor_.GetNextUtterance(); + if (utterance == "Find in page.") + break; + } } #if defined(MEMORY_SANITIZER) diff --git a/components/exo/shell_surface.cc b/components/exo/shell_surface.cc index 6598b78799ee67..beb4b9b0d902d1 100644 --- a/components/exo/shell_surface.cc +++ b/components/exo/shell_surface.cc @@ -1076,6 +1076,8 @@ void ShellSurface::CreateShellSurfaceWidget(ui::WindowShowState show_state) { aura::Window* window = widget_->GetNativeWindow(); window->SetName("ExoShellSurface"); + window->SetProperty(aura::client::kAccessibilityFocusFallsbackToWidgetKey, + false); window->AddChild(surface_->window()); window->SetEventTargeter(base::WrapUnique(new CustomWindowTargeter(widget_))); SetApplicationId(window, application_id_); diff --git a/ui/aura/client/aura_constants.cc b/ui/aura/client/aura_constants.cc index 132267c1f019c7..5f268a2d881e8c 100644 --- a/ui/aura/client/aura_constants.cc +++ b/ui/aura/client/aura_constants.cc @@ -27,6 +27,7 @@ namespace client { // Alphabetical sort. +DEFINE_WINDOW_PROPERTY_KEY(bool, kAccessibilityFocusFallsbackToWidgetKey, true); DEFINE_WINDOW_PROPERTY_KEY(bool, kAlwaysOnTopKey, false); DEFINE_WINDOW_PROPERTY_KEY(bool, kAnimationsDisabledKey, false); DEFINE_OWNED_WINDOW_PROPERTY_KEY(gfx::ImageSkia, kAppIconKey, nullptr); diff --git a/ui/aura/client/aura_constants.h b/ui/aura/client/aura_constants.h index ec29db231bf0a7..59aef03f633a15 100644 --- a/ui/aura/client/aura_constants.h +++ b/ui/aura/client/aura_constants.h @@ -24,6 +24,11 @@ namespace client { // Alphabetical sort. +// A property key to store whether accessibility focus falls back to widget or +// not. +AURA_EXPORT extern const WindowProperty* const + kAccessibilityFocusFallsbackToWidgetKey; + // A property key to store always-on-top flag. AURA_EXPORT extern const WindowProperty* const kAlwaysOnTopKey; diff --git a/ui/views/accessibility/ax_aura_obj_cache.cc b/ui/views/accessibility/ax_aura_obj_cache.cc index 0ce0047c998781..ad9df5c9fdd4d7 100644 --- a/ui/views/accessibility/ax_aura_obj_cache.cc +++ b/ui/views/accessibility/ax_aura_obj_cache.cc @@ -6,6 +6,8 @@ #include "base/memory/ptr_util.h" #include "base/memory/singleton.h" +#include "base/strings/string_util.h" +#include "ui/aura/client/aura_constants.h" #include "ui/aura/client/focus_client.h" #include "ui/aura/window.h" #include "ui/views/accessibility/ax_aura_obj_wrapper.h" @@ -160,8 +162,14 @@ View* AXAuraObjCache::GetFocusedView() { View* focused_view = focus_manager->GetFocusedView(); if (focused_view) return focused_view; - else + + if (focused_window->GetProperty( + aura::client::kAccessibilityFocusFallsbackToWidgetKey)) { + // If no view is focused, falls back to root view. return focused_widget->GetRootView(); + } + + return nullptr; } void AXAuraObjCache::OnWindowFocused(aura::Window* gained_focus,