Index: ui/views/focus/focus_manager_unittest.cc |
diff --git a/ui/views/focus/focus_manager_unittest.cc b/ui/views/focus/focus_manager_unittest.cc |
index 0566ff53df7289c329206f481151c363e406a358..425e9acf30a25cedcab098a5ac0c489dff8427bc 100644 |
--- a/ui/views/focus/focus_manager_unittest.cc |
+++ b/ui/views/focus/focus_manager_unittest.cc |
@@ -741,20 +741,64 @@ TEST_F(FocusManagerArrowKeyTraversalTest, ArrowKeyTraversal) { |
} |
TEST_F(FocusManagerTest, StoreFocusedView) { |
- View view; |
- GetFocusManager()->SetFocusedView(&view); |
+ View* view = new View; |
+ // Add view to the view hierarchy and make it focusable. |
+ GetWidget()->GetRootView()->AddChildView(view); |
+ view->SetFocusBehavior(View::FocusBehavior::ALWAYS); |
+ |
+ GetFocusManager()->SetFocusedView(view); |
GetFocusManager()->StoreFocusedView(false); |
EXPECT_EQ(NULL, GetFocusManager()->GetFocusedView()); |
EXPECT_TRUE(GetFocusManager()->RestoreFocusedView()); |
- EXPECT_EQ(&view, GetFocusManager()->GetStoredFocusView()); |
+ EXPECT_EQ(view, GetFocusManager()->GetStoredFocusView()); |
// Repeat with |true|. |
- GetFocusManager()->SetFocusedView(&view); |
+ GetFocusManager()->SetFocusedView(view); |
GetFocusManager()->StoreFocusedView(true); |
EXPECT_EQ(NULL, GetFocusManager()->GetFocusedView()); |
EXPECT_TRUE(GetFocusManager()->RestoreFocusedView()); |
- EXPECT_EQ(&view, GetFocusManager()->GetStoredFocusView()); |
+ EXPECT_EQ(view, GetFocusManager()->GetStoredFocusView()); |
+} |
+ |
+#if defined(OS_MACOSX) |
+// Test that the correct view is restored if full keyboard access is changed. |
+TEST_F(FocusManagerTest, StoreFocusedViewFullKeyboardAccess) { |
+ View* view1 = new View; |
+ View* view2 = new View; |
+ View* view3 = new View; |
+ |
+ // Make view1 focusable in accessibility mode, view2 not focusable and view3 |
+ // always focusable. |
+ view1->SetFocusBehavior(View::FocusBehavior::ACCESSIBLE_ONLY); |
+ view2->SetFocusBehavior(View::FocusBehavior::NEVER); |
+ view3->SetFocusBehavior(View::FocusBehavior::ALWAYS); |
+ |
+ // Add views to the view hierarchy |
+ GetWidget()->GetRootView()->AddChildView(view1); |
+ GetWidget()->GetRootView()->AddChildView(view2); |
+ GetWidget()->GetRootView()->AddChildView(view3); |
+ |
+ view1->RequestFocus(); |
+ EXPECT_EQ(view1, GetFocusManager()->GetFocusedView()); |
+ GetFocusManager()->StoreFocusedView(true); |
+ EXPECT_EQ(nullptr, GetFocusManager()->GetFocusedView()); |
+ |
+ // Turn off full keyboard access mode and restore focused view. Since view1 is |
+ // no longer focusable, view3 should have focus. |
+ GetFocusManager()->SetKeyboardAccessible(false); |
+ EXPECT_FALSE(GetFocusManager()->RestoreFocusedView()); |
+ EXPECT_EQ(view3, GetFocusManager()->GetFocusedView()); |
+ |
+ GetFocusManager()->StoreFocusedView(false); |
+ EXPECT_EQ(nullptr, GetFocusManager()->GetFocusedView()); |
+ |
+ // Turn on full keyboard access mode and restore focused view. Since view3 is |
+ // still focusable, view3 should have focus. |
+ GetFocusManager()->SetKeyboardAccessible(true); |
+ EXPECT_TRUE(GetFocusManager()->RestoreFocusedView()); |
+ EXPECT_EQ(view3, GetFocusManager()->GetFocusedView()); |
} |
+#endif |
namespace { |