15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_VIEWS_FOCUS_FOCUS_MANAGER_TEST_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_VIEWS_FOCUS_FOCUS_MANAGER_TEST_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/focus/focus_manager.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/focus/widget_focus_manager.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/test/views_test_base.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget_delegate.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FocusChangeListener; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FocusManagerTest : public ViewsTestBase, public WidgetDelegate { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FocusManagerTest(); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~FocusManagerTest(); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Convenience to obtain the focus manager for the test's hosting widget. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FocusManager* GetFocusManager(); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from ViewsTestBase: 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from WidgetDelegate: 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual View* GetContentsView() OVERRIDE; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual Widget* GetWidget() OVERRIDE; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const Widget* GetWidget() const OVERRIDE; 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void GetAccessiblePanes(std::vector<View*>* panes) OVERRIDE; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called after the Widget is initialized and the content view is added. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Override to add controls to the layout. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InitContentView(); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddFocusChangeListener(FocusChangeListener* listener); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddWidgetFocusChangeListener(WidgetFocusChangeListener* listener); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // For testing FocusManager::RotatePaneFocus(). 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetAccessiblePanes(const std::vector<View*>& panes); 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* contents_view_; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FocusChangeListener* focus_change_listener_; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WidgetFocusChangeListener* widget_focus_change_listener_; 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<View*> accessible_panes_; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FocusManagerTest); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::pair<View*, View*> ViewPair; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use to record focus change notifications. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestFocusChangeListener : public FocusChangeListener { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestFocusChangeListener(); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestFocusChangeListener(); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<ViewPair>& focus_changes() const { return focus_changes_; } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearFocusChanges(); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from FocusChangeListener: 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnWillChangeFocus(View* focused_before, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* focused_now) OVERRIDE; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnDidChangeFocus(View* focused_before, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* focused_now) OVERRIDE; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A vector of which views lost/gained focus. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<ViewPair> focus_changes_; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestFocusChangeListener); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::pair<gfx::NativeView, gfx::NativeView> NativeViewPair; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use to record widget focus change notifications. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestWidgetFocusChangeListener : public WidgetFocusChangeListener { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestWidgetFocusChangeListener(); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestWidgetFocusChangeListener(); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<NativeViewPair>& focus_changes() const { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return focus_changes_; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearFocusChanges(); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from WidgetFocusChangeListener: 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnNativeFocusChange(gfx::NativeView focused_before, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::NativeView focused_now) OVERRIDE; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pairs of (focused_before, focused_now) parameters we've received via calls 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to OnNativeFocusChange(), in oldest-to-newest-received order. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<NativeViewPair> focus_changes_; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestWidgetFocusChangeListener); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_VIEWS_FOCUS_FOCUS_MANAGER_TEST_H_ 107