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)#include "ui/views/focus/focus_manager_test.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <algorithm> 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/focus/focus_manager.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FocusManagerTest, public: 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FocusManagerTest::FocusManagerTest() 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : contents_view_(new View), 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus_change_listener_(NULL), 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) widget_focus_change_listener_(NULL) { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FocusManagerTest::~FocusManagerTest() { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FocusManager* FocusManagerTest::GetFocusManager() { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetWidget()->GetFocusManager(); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FocusManagerTest, ViewTestBase overrides: 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FocusManagerTest::SetUp() { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewsTestBase::SetUp(); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Widget* widget = new Widget; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.delegate = this; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.bounds = gfx::Rect(0, 0, 1024, 768); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget->Init(params); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitContentView(); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) widget->Show(); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FocusManagerTest::TearDown() { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (focus_change_listener_) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFocusManager()->RemoveFocusChangeListener(focus_change_listener_); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (widget_focus_change_listener_) { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WidgetFocusManager::GetInstance()->RemoveFocusChangeListener( 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) widget_focus_change_listener_); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWidget()->Close(); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Flush the message loop to make application verifiers happy. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunPendingMessages(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewsTestBase::TearDown(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FocusManagerTest, WidgetDelegate implementation: 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)View* FocusManagerTest::GetContentsView() { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return contents_view_; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Widget* FocusManagerTest::GetWidget() { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return contents_view_->GetWidget(); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const Widget* FocusManagerTest::GetWidget() const { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return contents_view_->GetWidget(); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FocusManagerTest::GetAccessiblePanes(std::vector<View*>* panes) { 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::copy(accessible_panes_.begin(), accessible_panes_.end(), 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::back_inserter(*panes)); 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FocusManagerTest, protected: 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FocusManagerTest::InitContentView() { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FocusManagerTest::AddFocusChangeListener(FocusChangeListener* listener) { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(focus_change_listener_); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus_change_listener_ = listener; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFocusManager()->AddFocusChangeListener(listener); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FocusManagerTest::AddWidgetFocusChangeListener( 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WidgetFocusChangeListener* listener) { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(widget_focus_change_listener_); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) widget_focus_change_listener_ = listener; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WidgetFocusManager::GetInstance()->AddFocusChangeListener(listener); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FocusManagerTest::SetAccessiblePanes(const std::vector<View*>& panes) { 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) accessible_panes_ = panes; 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) && !defined(USE_AURA) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FocusManagerTest::SimulateActivateWindow() { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendMessage(GetWidget()->GetNativeWindow(), WM_ACTIVATE, WA_ACTIVE, NULL); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FocusManagerTest::SimulateDeactivateWindow() { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendMessage(GetWidget()->GetNativeWindow(), WM_ACTIVATE, WA_INACTIVE, NULL); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FocusManagerTest::PostKeyDown(ui::KeyboardCode key_code) { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PostMessage(GetWidget()->GetNativeView(), WM_KEYDOWN, key_code, 0); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FocusManagerTest::PostKeyUp(ui::KeyboardCode key_code) { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PostMessage(GetWidget()->GetNativeView(), WM_KEYUP, key_code, 0); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TestFocusChangeListener 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestFocusChangeListener::TestFocusChangeListener() { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestFocusChangeListener::~TestFocusChangeListener() { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestFocusChangeListener::OnWillChangeFocus(View* focused_before, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* focused_now) { 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus_changes_.push_back(ViewPair(focused_before, focused_now)); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestFocusChangeListener::OnDidChangeFocus(View* focused_before, 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* focused_now) { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestFocusChangeListener::ClearFocusChanges() { 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus_changes_.clear(); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TestWidgetFocusChangeListener 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestWidgetFocusChangeListener::TestWidgetFocusChangeListener() { 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestWidgetFocusChangeListener::~TestWidgetFocusChangeListener() { 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestWidgetFocusChangeListener::ClearFocusChanges() { 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus_changes_.clear(); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestWidgetFocusChangeListener::OnNativeFocusChange( 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::NativeView focused_before, 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::NativeView focused_now) { 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus_changes_.push_back(NativeViewPair(focused_before, focused_now)); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 162