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 96eb42fcf32bf8a5bbc4286bc0a602319ef2d4cc..2649fef03909bf0018f59b3d4990fe06aec43286 100644 |
--- a/ui/views/focus/focus_manager_unittest.cc |
+++ b/ui/views/focus/focus_manager_unittest.cc |
@@ -43,7 +43,7 @@ class SimpleTestView : public View { |
public: |
SimpleTestView(std::vector<FocusTestEvent>* event_list, int view_id) |
: event_list_(event_list) { |
- SetFocusable(true); |
+ SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
set_id(view_id); |
} |
@@ -95,9 +95,9 @@ TEST_F(FocusManagerTest, ViewFocusCallbacks) { |
TEST_F(FocusManagerTest, FocusChangeListener) { |
View* view1 = new View(); |
- view1->SetFocusable(true); |
+ view1->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
View* view2 = new View(); |
- view2->SetFocusable(true); |
+ view2->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
GetContentsView()->AddChildView(view1); |
GetContentsView()->AddChildView(view2); |
@@ -602,17 +602,17 @@ TEST_F(FocusManagerTest, FocusInAboutToRequestFocusFromTabTraversal) { |
// Create 3 views focuses the 3 and advances to the second. The 2nd views |
// implementation of AboutToRequestFocusFromTabTraversal() focuses the first. |
views::View* v1 = new View; |
- v1->SetFocusable(true); |
+ v1->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
GetContentsView()->AddChildView(v1); |
FocusInAboutToRequestFocusFromTabTraversalView* v2 = |
new FocusInAboutToRequestFocusFromTabTraversalView; |
- v2->SetFocusable(true); |
+ v2->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
v2->set_view_to_focus(v1); |
GetContentsView()->AddChildView(v2); |
views::View* v3 = new View; |
- v3->SetFocusable(true); |
+ v3->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
GetContentsView()->AddChildView(v3); |
v3->RequestFocus(); |
@@ -625,22 +625,22 @@ TEST_F(FocusManagerTest, RotatePaneFocus) { |
GetContentsView()->AddChildView(pane1); |
views::View* v1 = new View; |
- v1->SetFocusable(true); |
+ v1->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
pane1->AddChildView(v1); |
views::View* v2 = new View; |
- v2->SetFocusable(true); |
+ v2->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
pane1->AddChildView(v2); |
views::AccessiblePaneView* pane2 = new AccessiblePaneView(); |
GetContentsView()->AddChildView(pane2); |
views::View* v3 = new View; |
- v3->SetFocusable(true); |
+ v3->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
pane2->AddChildView(v3); |
views::View* v4 = new View; |
- v4->SetFocusable(true); |
+ v4->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
pane2->AddChildView(v4); |
std::vector<views::View*> panes; |
@@ -695,11 +695,11 @@ TEST_F(FocusManagerTest, RotatePaneFocus) { |
// Verifies the stored focus view tracks the focused view. |
TEST_F(FocusManagerTest, ImplicitlyStoresFocus) { |
views::View* v1 = new View; |
- v1->SetFocusable(true); |
+ v1->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
GetContentsView()->AddChildView(v1); |
views::View* v2 = new View; |
- v2->SetFocusable(true); |
+ v2->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
GetContentsView()->AddChildView(v2); |
// Verify a focus request on |v1| implicitly updates the stored focus view. |
@@ -753,7 +753,7 @@ TEST_F(FocusManagerArrowKeyTraversalTest, ArrowKeyTraversal) { |
std::vector<views::View*> v; |
for (size_t i = 0; i < 2; ++i) { |
views::View* view = new View; |
- view->SetFocusable(true); |
+ view->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
GetContentsView()->AddChildView(view); |
v.push_back(view); |
} |
@@ -784,20 +784,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(views::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(views::View::FocusBehavior::ACCESSIBLE_ONLY); |
+ view2->SetFocusBehavior(views::View::FocusBehavior::NEVER); |
+ view3->SetFocusBehavior(views::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 { |
@@ -834,7 +878,7 @@ class AdvanceFocusWidgetDelegate : public WidgetDelegate { |
TEST_F(FocusManagerTest, AdvanceFocusStaysInWidget) { |
// Add |widget_view| as a child of the Widget. |
View* widget_view = new View; |
- widget_view->SetFocusable(true); |
+ widget_view->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
widget_view->SetBounds(20, 0, 20, 20); |
GetContentsView()->AddChildView(widget_view); |
@@ -850,10 +894,10 @@ TEST_F(FocusManagerTest, AdvanceFocusStaysInWidget) { |
params.delegate = delegate.get(); |
child_widget.Init(params); |
View* view1 = new View; |
- view1->SetFocusable(true); |
+ view1->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
view1->SetBounds(0, 0, 20, 20); |
View* view2 = new View; |
- view2->SetFocusable(true); |
+ view2->SetFocusBehavior(views::View::FocusBehavior::ALWAYS); |
view2->SetBounds(20, 0, 20, 20); |
child_widget.client_view()->AddChildView(view1); |
child_widget.client_view()->AddChildView(view2); |