12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/corewm/tooltip_controller.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/client/cursor_client.h" 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/aura/client/screen_position_client.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/env.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/test/aura_test_base.h" 121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/aura/test/test_screen.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/aura/test/test_window_delegate.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/window.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/aura/window_event_dispatcher.h" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/events/test/event_generator.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/font.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/point.h" 191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/gfx/screen.h" 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/gfx/screen_type_delegate.h" 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/gfx/text_elider.h" 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/views/corewm/tooltip_aura.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/corewm/tooltip_controller_test_helper.h" 246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "ui/views/test/desktop_test_views_delegate.h" 256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "ui/views/test/test_views_delegate.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/view.h" 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/views/widget/tooltip_manager.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/widget.h" 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "ui/wm/core/default_activation_client.h" 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/wm/core/wm_state.h" 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/wm/public/tooltip_client.h" 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/wm/public/window_types.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/win/scoped_ole_initializer.h" 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_CHROMEOS) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" 401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/views/widget/desktop_aura/desktop_screen.h" 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace views { 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace corewm { 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace test { 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)views::Widget* CreateWidget(aura::Window* root) { 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget* widget = new views::Widget; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget::InitParams params; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.accept_events = true; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.parent = root; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.native_widget = new DesktopNativeWidgetAura(widget); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.bounds = gfx::Rect(0, 0, 200, 100); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget->Init(params); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget->Show(); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return widget; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TooltipController* GetController(Widget* widget) { 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return static_cast<TooltipController*>( 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::client::GetTooltipClient( 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget->GetNativeWindow()->GetRootWindow())); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TooltipControllerTest : public aura::test::AuraTestBase { 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipControllerTest() : view_(NULL) {} 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TooltipControllerTest() {} 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE { 816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#if defined(OS_CHROMEOS) 826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) views_delegate_.reset(new TestViewsDelegate); 836d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#else 846d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) views_delegate_.reset(new DesktopTestViewsDelegate); 856d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif 866d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::test::AuraTestBase::SetUp(); 885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu new wm::DefaultActivationClient(root_window()); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) controller_.reset(new TooltipController( 914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<views::corewm::Tooltip>( 924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) new views::corewm::TooltipAura(gfx::SCREEN_TYPE_ALTERNATE)))); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_window()->AddPreTargetHandler(controller_.get()); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetTooltipClient(root_window(), controller_.get()); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_.reset(CreateWidget(root_window())); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->SetContentsView(new View); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_ = new TooltipTestView; 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->GetContentsView()->AddChildView(view_); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->SetBoundsRect(widget_->GetContentsView()->GetLocalBounds()); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_.reset(new TooltipControllerTestHelper( 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetController(widget_.get()))); 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) generator_.reset(new ui::test::EventGenerator(GetRootWindow())); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown() OVERRIDE { 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_window()->RemovePreTargetHandler(controller_.get()); 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) aura::client::SetTooltipClient(root_window(), NULL); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller_.reset(); 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_.reset(); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_.reset(); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_.reset(); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::test::AuraTestBase::TearDown(); 1166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) views_delegate_.reset(); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::Window* GetWindow() { 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return widget_->GetNativeWindow(); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* GetRootWindow() { 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetWindow()->GetRootWindow(); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipTestView* PrepareSecondView() { 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipTestView* view2 = new TooltipTestView; 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->GetContentsView()->AddChildView(view2); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->SetBounds(0, 0, 100, 100); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view2->SetBounds(100, 0, 100, 100); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return view2; 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<views::Widget> widget_; 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipTestView* view_; 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TooltipControllerTestHelper> helper_; 1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<ui::test::EventGenerator> generator_; 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TooltipController> controller_; 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) scoped_ptr<views::TestViewsDelegate> views_delegate_; 1456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ScopedOleInitializer ole_initializer_; 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TooltipControllerTest); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TooltipControllerTest, ViewTooltip) { 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text")); 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseToCenterOf(GetWindow()); 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetWindow(), GetRootWindow()->GetEventHandlerForPoint( 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->current_location())); 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text"); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(GetWindow())); 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetWindow(), helper_->GetTooltipWindow()); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(GetWindow())); 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(GetWindow(), helper_->GetTooltipWindow()); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TooltipControllerTest, TooltipsInMultipleViews) { 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text")); 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrepareSecondView(); 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::Window* window = GetWindow(); 1851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* root_window = GetRootWindow(); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseRelativeTo(window, view_->bounds().CenterPoint()); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 49; ++i) { 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, root_window->GetEventHandlerForPoint( 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->current_location())); 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text"); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 49; ++i) { 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, root_window->GetEventHandlerForPoint( 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->current_location())); 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip; // = "" 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TooltipControllerTest, EnableOrDisableTooltips) { 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text")); 2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), view_->bounds().CenterPoint()); 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text"); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Disable tooltips and check again. 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->controller()->SetTooltipsEnabled(false); 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Enable tooltips back and check again. 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->controller()->SetTooltipsEnabled(true); 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Verifies tooltip isn't shown if tooltip text consists entirely of whitespace. 2391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TooltipControllerTest, DontShowEmptyTooltips) { 2401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16(" ")); 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 2421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 2431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), view_->bounds().CenterPoint()); 2451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) helper_->FireTooltipTimer(); 2471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 2481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 2491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TooltipControllerTest, TooltipHidesOnKeyPressAndStaysHiddenUntilChange) { 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text for view 1")); 2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipTestView* view2 = PrepareSecondView(); 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view2->set_tooltip_text(ASCIIToUTF16("Tooltip Text for view 2")); 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::Window* window = GetWindow(); 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseRelativeTo(window, view_->bounds().CenterPoint()); 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipShownTimerRunning()); 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->PressKey(ui::VKEY_1, 0); 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipTimerRunning()); 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipShownTimerRunning()); 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Moving the mouse inside |view1| should not change the state of the tooltip 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // or the timers. 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 49; i++) { 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipTimerRunning()); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipShownTimerRunning()); 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRootWindow()->GetEventHandlerForPoint( 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->current_location())); 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text for view 1"); 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Now we move the mouse on to |view2|. It should re-start the tooltip timer. 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipTimerRunning()); 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipShownTimerRunning()); 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text for view 2"); 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(TooltipControllerTest, TooltipHidesOnTimeoutAndStaysHiddenUntilChange) { 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text for view 1")); 3015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(NULL, helper_->GetTooltipWindow()); 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TooltipTestView* view2 = PrepareSecondView(); 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view2->set_tooltip_text(ASCIIToUTF16("Tooltip Text for view 2")); 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::Window* window = GetWindow(); 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseRelativeTo(window, view_->bounds().CenterPoint()); 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipShownTimerRunning()); 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipShownTimer(); 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipTimerRunning()); 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipShownTimerRunning()); 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Moving the mouse inside |view1| should not change the state of the tooltip 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // or the timers. 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 49; ++i) { 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipTimerRunning()); 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipShownTimerRunning()); 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, GetRootWindow()->GetEventHandlerForPoint( 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->current_location())); 3295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text for view 1"); 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Now we move the mouse on to |view2|. It should re-start the tooltip timer. 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator_->MoveMouseBy(1, 0); 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipTimerRunning()); 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) helper_->FireTooltipTimer(); 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipShownTimerRunning()); 3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text for view 2"); 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(window)); 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(expected_tooltip, helper_->GetTooltipText()); 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(window, helper_->GetTooltipWindow()); 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 347424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Verifies a mouse exit event hides the tooltips. 348424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST_F(TooltipControllerTest, HideOnExit) { 349424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text")); 350424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) generator_->MoveMouseToCenterOf(GetWindow()); 3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text"); 352424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(GetWindow())); 3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 354424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_EQ(GetWindow(), helper_->GetTooltipWindow()); 355424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 356424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 357424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) helper_->FireTooltipTimer(); 358424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 359424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 360424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) generator_->SendMouseExit(); 361424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 362424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 363424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 3645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(TooltipControllerTest, ReshowOnClickAfterEnterExit) { 3655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Owned by |view_|. 3665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TooltipTestView* v1 = new TooltipTestView; 3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TooltipTestView* v2 = new TooltipTestView; 3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) view_->AddChildView(v1); 3695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) view_->AddChildView(v2); 3705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Rect view_bounds(view_->GetLocalBounds()); 3715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) view_bounds.set_height(view_bounds.height() / 2); 3725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) v1->SetBoundsRect(view_bounds); 3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) view_bounds.set_y(view_bounds.height()); 3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) v2->SetBoundsRect(view_bounds); 3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 v1_tt(ASCIIToUTF16("v1")); 3765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 v2_tt(ASCIIToUTF16("v2")); 3775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) v1->set_tooltip_text(v1_tt); 3785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) v2->set_tooltip_text(v2_tt); 3795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Point v1_point(1, 1); 3815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) View::ConvertPointToWidget(v1, &v1_point); 3825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), v1_point); 3835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 3855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper_->FireTooltipTimer(); 3865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 3875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(v1_tt, helper_->GetTooltipText()); 3885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Press the mouse, move to v2 and back to v1. 3905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator_->ClickLeftButton(); 3915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Point v2_point(1, 1); 3935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) View::ConvertPointToWidget(v2, &v2_point); 3945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), v2_point); 3955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), v1_point); 3965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper_->FireTooltipTimer(); 3985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 3995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(v1_tt, helper_->GetTooltipText()); 4005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 4015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace { 4031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Returns the index of |window| in its parent's children. 4051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)int IndexInParent(const aura::Window* window) { 4061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window::Windows::const_iterator i = 4071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::find(window->parent()->children().begin(), 4081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) window->parent()->children().end(), 4091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) window); 4101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return i == window->parent()->children().end() ? -1 : 4111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static_cast<int>(i - window->parent()->children().begin()); 4121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 4131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class TestScreenPositionClient : public aura::client::ScreenPositionClient { 4151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: 4161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestScreenPositionClient() {} 4171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual ~TestScreenPositionClient() {} 4181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // ScreenPositionClient overrides: 4201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void ConvertPointToScreen(const aura::Window* window, 4211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Point* point) OVERRIDE { 4221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void ConvertPointFromScreen(const aura::Window* window, 4241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Point* point) OVERRIDE { 4251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void ConvertHostPointToScreen(aura::Window* root_gwindow, 4271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Point* point) OVERRIDE { 4281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) NOTREACHED(); 4291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void SetBounds(aura::Window* window, 4311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const gfx::Rect& bounds, 4321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const gfx::Display& display) OVERRIDE { 4331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) window->SetBounds(bounds); 4341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) private: 4371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestScreenPositionClient); 4381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 4391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} // namespace 4411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class TooltipControllerCaptureTest : public TooltipControllerTest { 4431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: 4441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TooltipControllerCaptureTest() {} 4451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual ~TooltipControllerCaptureTest() {} 4461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void SetUp() OVERRIDE { 4481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TooltipControllerTest::SetUp(); 4491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::client::SetScreenPositionClient(GetRootWindow(), 4501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) &screen_position_client_); 4511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if !defined(OS_CHROMEOS) 4521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) desktop_screen_.reset(CreateDesktopScreen()); 4531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, 4541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) desktop_screen_.get()); 4551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 4561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void TearDown() OVERRIDE { 4591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if !defined(OS_CHROMEOS) 4601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, test_screen()); 4611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) desktop_screen_.reset(); 4621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 4631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::client::SetScreenPositionClient(GetRootWindow(), NULL); 4641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TooltipControllerTest::TearDown(); 4651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) private: 4681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TestScreenPositionClient screen_position_client_; 4691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<gfx::Screen> desktop_screen_; 4701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TooltipControllerCaptureTest); 4721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 4731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Verifies when capture is released the TooltipController resets state. 475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Flaky on all builders. http://crbug.com/388268 476116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(TooltipControllerCaptureTest, DISABLED_CloseOnCaptureLost) { 4771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) view_->GetWidget()->SetCapture(view_); 478c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch RunAllPendingInMessageLoop(); 4791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) view_->set_tooltip_text(ASCIIToUTF16("Tooltip Text")); 4801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) generator_->MoveMouseToCenterOf(GetWindow()); 4815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 expected_tooltip = ASCIIToUTF16("Tooltip Text"); 4821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(expected_tooltip, aura::client::GetTooltipText(GetWindow())); 4835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::string16(), helper_->GetTooltipText()); 4841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(GetWindow(), helper_->GetTooltipWindow()); 4851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 4871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) helper_->FireTooltipTimer(); 4881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 4901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) view_->GetWidget()->ReleaseCapture(); 4911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 4921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(helper_->GetTooltipWindow() == NULL); 4931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 4941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Disabled on linux as DesktopScreenX11::GetWindowAtScreenPoint() doesn't 4961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// consider z-order. 4971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) 4981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_Capture DISABLED_Capture 4991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 5001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_Capture Capture 5011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 5021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Verifies the correct window is found for tooltips when there is a capture. 5031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TooltipControllerCaptureTest, MAYBE_Capture) { 5045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 tooltip_text(ASCIIToUTF16("1")); 5055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16 tooltip_text2(ASCIIToUTF16("2")); 5061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget_->SetBounds(gfx::Rect(0, 0, 200, 200)); 5081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) view_->set_tooltip_text(tooltip_text); 5091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<views::Widget> widget2(CreateWidget(root_window())); 5111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget2->SetContentsView(new View); 5121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TooltipTestView* view2 = new TooltipTestView; 5131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget2->GetContentsView()->AddChildView(view2); 5141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) view2->set_tooltip_text(tooltip_text2); 5151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget2->SetBounds(gfx::Rect(0, 0, 200, 200)); 5161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) view2->SetBoundsRect(widget2->GetContentsView()->GetLocalBounds()); 5171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget_->SetCapture(view_); 5191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(widget_->HasCapture()); 5201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget2->Show(); 5211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_GE(IndexInParent(widget2->GetNativeWindow()), 5221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IndexInParent(widget_->GetNativeWindow())); 5231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) generator_->MoveMouseRelativeTo(widget_->GetNativeWindow(), 5251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) view_->bounds().CenterPoint()); 5261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipTimerRunning()); 5281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) helper_->FireTooltipTimer(); 5291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Even though the mouse is over a window with a tooltip it shouldn't be 5301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // picked up because the windows don't have the same value for 5311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // |TooltipManager::kGroupingPropertyKey|. 5321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(helper_->GetTooltipText().empty()); 5331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Now make both the windows have same transient value for 5351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // kGroupingPropertyKey. In this case the tooltip should be picked up from 5361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // |widget2| (because the mouse is over it). 5371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const int grouping_key = 1; 5381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget_->SetNativeWindowProperty(TooltipManager::kGroupingPropertyKey, 5391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) reinterpret_cast<void*>(grouping_key)); 5401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget2->SetNativeWindowProperty(TooltipManager::kGroupingPropertyKey, 5411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) reinterpret_cast<void*>(grouping_key)); 5421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) generator_->MoveMouseBy(1, 10); 5431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipTimerRunning()); 5441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) helper_->FireTooltipTimer(); 5451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(tooltip_text2, helper_->GetTooltipText()); 5461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) widget2.reset(); 5481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 5491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace { 5515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class TestTooltip : public Tooltip { 5535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 5545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestTooltip() : is_visible_(false) {} 5555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~TestTooltip() {} 5565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16& tooltip_text() const { return tooltip_text_; } 5585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Tooltip: 5605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetText(aura::Window* window, 5615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const base::string16& tooltip_text, 5625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Point& location) OVERRIDE { 5635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tooltip_text_ = tooltip_text; 564f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) location_ = location; 5655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void Show() OVERRIDE { 5675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_visible_ = true; 5685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void Hide() OVERRIDE { 5705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_visible_ = false; 5715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 5725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool IsVisible() OVERRIDE { 5735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return is_visible_; 5745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 575f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const gfx::Point& location() { return location_; } 5765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 5785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_visible_; 5795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 tooltip_text_; 580f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) gfx::Point location_; 5815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestTooltip); 5835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 5845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace 5865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use for tests that don't depend upon views. 5885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class TooltipControllerTest2 : public aura::test::AuraTestBase { 5895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 5905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TooltipControllerTest2() : test_tooltip_(new TestTooltip) {} 5915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~TooltipControllerTest2() {} 5925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void SetUp() OVERRIDE { 594a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) wm_state_.reset(new wm::WMState); 5955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::test::AuraTestBase::SetUp(); 5965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu new wm::DefaultActivationClient(root_window()); 5975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller_.reset(new TooltipController( 598a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<corewm::Tooltip>(test_tooltip_))); 5995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) root_window()->AddPreTargetHandler(controller_.get()); 6005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetTooltipClient(root_window(), controller_.get()); 6015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper_.reset(new TooltipControllerTestHelper(controller_.get())); 6025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) generator_.reset(new ui::test::EventGenerator(root_window())); 6035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 6045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void TearDown() OVERRIDE { 6065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) root_window()->RemovePreTargetHandler(controller_.get()); 6075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::client::SetTooltipClient(root_window(), NULL); 6085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) controller_.reset(); 6095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator_.reset(); 6105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper_.reset(); 6115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::test::AuraTestBase::TearDown(); 6125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) wm_state_.reset(); 6135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 6145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected: 6165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Owned by |controller_|. 6175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TestTooltip* test_tooltip_; 6185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<TooltipControllerTestHelper> helper_; 6195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<ui::test::EventGenerator> generator_; 6205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 6225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<TooltipController> controller_; 623a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<wm::WMState> wm_state_; 6245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TooltipControllerTest2); 6265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 6275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(TooltipControllerTest2, VerifyLeadingTrailingWhitespaceStripped) { 6295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::test::TestWindowDelegate test_delegate; 6305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<aura::Window> window( 6315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateNormalWindow(100, root_window(), &test_delegate)); 6325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window->SetBounds(gfx::Rect(0, 0, 300, 300)); 6335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 tooltip_text(ASCIIToUTF16(" \nx ")); 6345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::client::SetTooltipText(window.get(), &tooltip_text); 6355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator_->MoveMouseToCenterOf(window.get()); 6365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper_->FireTooltipTimer(); 6375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("x"), test_tooltip_->tooltip_text()); 6385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 6395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Verifies that tooltip is hidden and tooltip window closed upon cancel mode. 6415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(TooltipControllerTest2, CloseOnCancelMode) { 6425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::test::TestWindowDelegate test_delegate; 6435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<aura::Window> window( 6445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateNormalWindow(100, root_window(), &test_delegate)); 6455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window->SetBounds(gfx::Rect(0, 0, 300, 300)); 6465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 tooltip_text(ASCIIToUTF16("Tooltip Text")); 6475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::client::SetTooltipText(window.get(), &tooltip_text); 6485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator_->MoveMouseToCenterOf(window.get()); 6495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Fire tooltip timer so tooltip becomes visible. 6515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper_->FireTooltipTimer(); 6525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 6535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Send OnCancelMode event and verify that tooltip becomes invisible and 6555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // the tooltip window is closed. 6565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::CancelModeEvent event; 6575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) helper_->controller()->OnCancelMode(&event); 6585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(helper_->IsTooltipVisible()); 6595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(helper_->GetTooltipWindow() == NULL); 6605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 6615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 662f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use for tests that need both views and a TestTooltip. 663f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class TooltipControllerTest3 : public aura::test::AuraTestBase { 664f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 665f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TooltipControllerTest3() : test_tooltip_(new TestTooltip) {} 666f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual ~TooltipControllerTest3() {} 667f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 668f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void SetUp() OVERRIDE { 669f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) wm_state_.reset(new wm::WMState); 670f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) aura::test::AuraTestBase::SetUp(); 671f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) new wm::DefaultActivationClient(root_window()); 672f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 673f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) widget_.reset(CreateWidget(root_window())); 674f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) widget_->SetContentsView(new View); 675f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) view_ = new TooltipTestView; 676f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) widget_->GetContentsView()->AddChildView(view_); 677f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) view_->SetBoundsRect(widget_->GetContentsView()->GetLocalBounds()); 678f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 6795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) generator_.reset(new ui::test::EventGenerator(GetRootWindow())); 680f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) controller_.reset(new TooltipController( 681f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<views::corewm::Tooltip>(test_tooltip_))); 682f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetRootWindow()->RemovePreTargetHandler( 683f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) static_cast<TooltipController*>(aura::client::GetTooltipClient( 684f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) widget_->GetNativeWindow()->GetRootWindow()))); 685f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetRootWindow()->AddPreTargetHandler(controller_.get()); 686f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) helper_.reset(new TooltipControllerTestHelper(controller_.get())); 687f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetTooltipClient(GetRootWindow(), controller_.get()); 688f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 689f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 690f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void TearDown() OVERRIDE { 691f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetRootWindow()->RemovePreTargetHandler(controller_.get()); 692f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) aura::client::SetTooltipClient(GetRootWindow(), NULL); 693f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 694f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) controller_.reset(); 695f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) generator_.reset(); 696f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) helper_.reset(); 697f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) widget_.reset(); 698f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) aura::test::AuraTestBase::TearDown(); 699f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) wm_state_.reset(); 700f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 701f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 702f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) aura::Window* GetWindow() { return widget_->GetNativeWindow(); } 703f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 704f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) protected: 705f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Owned by |controller_|. 706f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TestTooltip* test_tooltip_; 707f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<TooltipControllerTestHelper> helper_; 7085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<ui::test::EventGenerator> generator_; 709f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<views::Widget> widget_; 710f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TooltipTestView* view_; 711f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 712f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 713f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<TooltipController> controller_; 714f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<wm::WMState> wm_state_; 715f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 716f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(OS_WIN) 717f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ui::ScopedOleInitializer ole_initializer_; 718f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif 719f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 720f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) aura::Window* GetRootWindow() { return GetWindow()->GetRootWindow(); } 721f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 722f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TooltipControllerTest3); 723f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 724f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 725f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(TooltipControllerTest3, TooltipPositionChangesOnTwoViewsWithSameLabel) { 726f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Owned by |view_|. 727f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // These two views have the same tooltip text 728f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TooltipTestView* v1 = new TooltipTestView; 729f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TooltipTestView* v2 = new TooltipTestView; 730f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // v1_1 is a view inside v1 that has an identical tooltip text to that of v1 731f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // and v2 732f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TooltipTestView* v1_1 = new TooltipTestView; 733f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // v2_1 is a view inside v2 that has an identical tooltip text to that of v1 734f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // and v2 735f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TooltipTestView* v2_1 = new TooltipTestView; 736f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // v2_2 is a view inside v2 with the tooltip text different from all the 737f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // others 738f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TooltipTestView* v2_2 = new TooltipTestView; 739f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 740f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Setup all the views' relations 741f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) view_->AddChildView(v1); 742f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) view_->AddChildView(v2); 743f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) v1->AddChildView(v1_1); 744f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) v2->AddChildView(v2_1); 745f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) v2->AddChildView(v2_2); 746f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const base::string16 reference_string( 747f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::ASCIIToUTF16("Identical Tooltip Text")); 748f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const base::string16 alternative_string( 749f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::ASCIIToUTF16("Another Shrubbery")); 750f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) v1->set_tooltip_text(reference_string); 751f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) v2->set_tooltip_text(reference_string); 752f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) v1_1->set_tooltip_text(reference_string); 753f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) v2_1->set_tooltip_text(reference_string); 754f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) v2_2->set_tooltip_text(alternative_string); 755f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 756f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Set views' bounds 757f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) gfx::Rect view_bounds(view_->GetLocalBounds()); 758f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) view_bounds.set_height(view_bounds.height() / 2); 759f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) v1->SetBoundsRect(view_bounds); 760f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) v1_1->SetBounds(0, 0, 3, 3); 761f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) view_bounds.set_y(view_bounds.height()); 762f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) v2->SetBoundsRect(view_bounds); 763f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) v2_2->SetBounds(view_bounds.width() - 3, view_bounds.height() - 3, 3, 3); 764f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) v2_1->SetBounds(0, 0, 3, 3); 765f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 766f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Test whether a toolbar appears on v1 767f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) gfx::Point center = v1->bounds().CenterPoint(); 768f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), center); 769f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) helper_->FireTooltipTimer(); 770f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 771f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(reference_string, helper_->GetTooltipText()); 772f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) gfx::Point tooltip_bounds1 = test_tooltip_->location(); 773f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 774f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Test whether the toolbar changes position on mouse over v2 775f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) center = v2->bounds().CenterPoint(); 776f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), center); 777f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) helper_->FireTooltipTimer(); 778f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 779f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(reference_string, helper_->GetTooltipText()); 780f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) gfx::Point tooltip_bounds2 = test_tooltip_->location(); 781f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 782f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_NE(tooltip_bounds1, gfx::Point()); 783f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_NE(tooltip_bounds2, gfx::Point()); 784f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_NE(tooltip_bounds1, tooltip_bounds2); 785f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 786f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Test if the toolbar does not change position on encountering a contained 787f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // view with the same tooltip text 788f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) center = v2_1->GetLocalBounds().CenterPoint(); 789f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::View::ConvertPointToTarget(v2_1, view_, ¢er); 790f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), center); 791f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) helper_->FireTooltipTimer(); 792f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) gfx::Point tooltip_bounds2_1 = test_tooltip_->location(); 793f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 794f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_NE(tooltip_bounds2, tooltip_bounds2_1); 795f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 796f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(reference_string, helper_->GetTooltipText()); 797f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 798f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Test if the toolbar changes position on encountering a contained 799f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // view with a different tooltip text 800f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) center = v2_2->GetLocalBounds().CenterPoint(); 801f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::View::ConvertPointToTarget(v2_2, view_, ¢er); 802f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), center); 803f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) helper_->FireTooltipTimer(); 804f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) gfx::Point tooltip_bounds2_2 = test_tooltip_->location(); 805f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 806f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_NE(tooltip_bounds2_1, tooltip_bounds2_2); 807f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 808f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(alternative_string, helper_->GetTooltipText()); 809f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 810f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Test if moving from a view that is contained by a larger view, both with 811f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // the same tooltip text, does not change tooltip's position. 812f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) center = v1_1->GetLocalBounds().CenterPoint(); 813f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::View::ConvertPointToTarget(v1_1, view_, ¢er); 814f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), center); 815f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) helper_->FireTooltipTimer(); 816f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) gfx::Point tooltip_bounds1_1 = test_tooltip_->location(); 817f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 818f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(helper_->IsTooltipVisible()); 819f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(reference_string, helper_->GetTooltipText()); 820f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 821f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) center = v1->bounds().CenterPoint(); 822f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) generator_->MoveMouseRelativeTo(GetWindow(), center); 823f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) helper_->FireTooltipTimer(); 824f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) tooltip_bounds1 = test_tooltip_->location(); 825f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 826f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_NE(tooltip_bounds1_1, tooltip_bounds1); 827f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(reference_string, helper_->GetTooltipText()); 828f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 829f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 8302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace test 8312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace corewm 8322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace views 833