14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 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) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/shelf/shelf_tooltip_manager.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/root_window_controller.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shelf/shelf_layout_manager.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shelf/shelf_widget.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shell_window_ids.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/test/ash_test_base.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/test/shelf_test_api.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/wm/window_util.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/aura/window_event_dispatcher.h" 18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event.h" 19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event_constants.h" 20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event_handler.h" 21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h" 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/events/test/events_test_utils.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetEventTarget(ui::EventTarget* target, 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Event* event) { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Event::DispatcherApi dispatch_helper(event); 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dispatch_helper.set_target(target); 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class ShelfTooltipManagerTest : public AshTestBase { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ShelfTooltipManagerTest() {} 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual ~ShelfTooltipManagerTest() {} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AshTestBase::SetUp(); 45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch RootWindowController* controller = Shell::GetPrimaryRootWindowController(); 46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch tooltip_manager_.reset(new ShelfTooltipManager( 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controller->GetShelfLayoutManager(), 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ShelfTestAPI(controller->shelf()->shelf()).shelf_view())); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tooltip_manager_.reset(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AshTestBase::TearDown(); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ShowDelayed() { 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateWidget(); 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tooltip_manager_->ShowDelayed(dummy_anchor_.get(), base::string16()); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ShowImmediately() { 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateWidget(); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tooltip_manager_->ShowImmediately(dummy_anchor_.get(), base::string16()); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool TooltipIsVisible() { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return tooltip_manager_->IsVisible(); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsTimerRunning() { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return tooltip_manager_->timer_.get() != NULL; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EventHandler* GetEventHandler() { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return tooltip_manager_.get(); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Widget* GetTooltipWidget() { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return tooltip_manager_->widget_; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<views::Widget> widget_; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<views::View> dummy_anchor_; 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_ptr<ShelfTooltipManager> tooltip_manager_; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CreateWidget() { 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dummy_anchor_.reset(new views::View); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_.reset(new views::Widget); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget::InitParams params( 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); 94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 96c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch params.parent = Shell::GetContainer(Shell::GetPrimaryRootWindow(), 97c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ash::kShellWindowId_ShelfContainer); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->Init(params); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) widget_->SetContentsView(dummy_anchor_.get()); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ShelfTooltipManagerTest); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(ShelfTooltipManagerTest, ShowingBasics) { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ShowDelayed() should just start the timer instead of showing immediately. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowDelayed(); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(TooltipIsVisible()); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(IsTimerRunning()); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowImmediately(); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(TooltipIsVisible()); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(IsTimerRunning()); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(ShelfTooltipManagerTest, HideWhenShelfIsHidden) { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowImmediately(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(TooltipIsVisible()); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a full-screen window to hide the shelf. 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<views::Widget> widget(new views::Widget); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.context = CurrentContext(); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) widget->Init(params); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) widget->SetFullscreen(true); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) widget->Show(); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Once the shelf is hidden, the tooltip should be invisible. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ( 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SHELF_HIDDEN, 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Shell::GetPrimaryRootWindowController()-> 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetShelfLayoutManager()->visibility_state()); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(TooltipIsVisible()); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not show the view if the shelf is hidden. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowImmediately(); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(TooltipIsVisible()); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ShowDelayed() doesn't even start the timer for the hidden shelf. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowDelayed(); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(IsTimerRunning()); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(ShelfTooltipManagerTest, HideWhenShelfIsAutoHide) { 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create a visible window so auto-hide behavior is enforced. 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget* dummy = new views::Widget; 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.bounds = gfx::Rect(0, 0, 200, 200); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.context = CurrentContext(); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dummy->Init(params); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dummy->Show(); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowImmediately(); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(TooltipIsVisible()); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 158c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ShelfLayoutManager* shelf = 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager(); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shelf->UpdateAutoHideState(); 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf->auto_hide_state()); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tooltip visibility change for auto hide may take time. 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(TooltipIsVisible()); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAllPendingInMessageLoop(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(TooltipIsVisible()); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not show the view if the shelf is hidden. 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowImmediately(); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(TooltipIsVisible()); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ShowDelayed doesn't even run the timer for the hidden shelf. 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowDelayed(); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(IsTimerRunning()); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(ShelfTooltipManagerTest, ShouldHideForEvents) { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowImmediately(); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(TooltipIsVisible()); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* root_window = Shell::GetInstance()->GetPrimaryRootWindow(); 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EventHandler* event_handler = GetEventHandler(); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should not hide for key events. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE, false); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetEventTarget(root_window, &key_event); 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event_handler->OnKeyEvent(&key_event); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(key_event.handled()); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(TooltipIsVisible()); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should hide for touch events. 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::TouchEvent touch_event( 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_TOUCH_PRESSED, gfx::Point(), 0, base::TimeDelta()); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetEventTarget(root_window, &touch_event); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event_handler->OnTouchEvent(&touch_event); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(touch_event.handled()); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(TooltipIsVisible()); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shouldn't hide if the touch happens on the tooltip. 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowImmediately(); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Widget* tooltip_widget = GetTooltipWidget(); 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetEventTarget(tooltip_widget->GetNativeWindow(), &touch_event); 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event_handler->OnTouchEvent(&touch_event); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(touch_event.handled()); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(TooltipIsVisible()); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should hide for gesture events. 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::GestureEvent gesture_event( 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ET_GESTURE_BEGIN, 0, 0, ui::EF_NONE, 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromMilliseconds(base::Time::Now().ToDoubleT() * 1000), 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::GestureEventDetails(ui::ET_GESTURE_BEGIN, 0.0f, 0.0f), 0); 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetEventTarget(tooltip_widget->GetNativeWindow(), &gesture_event); 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event_handler->OnGestureEvent(&gesture_event); 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(gesture_event.handled()); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAllPendingInMessageLoop(); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(TooltipIsVisible()); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(ShelfTooltipManagerTest, HideForMouseMoveEvent) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowImmediately(); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(TooltipIsVisible()); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* root_window = Shell::GetInstance()->GetPrimaryRootWindow(); 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::EventHandler* event_handler = GetEventHandler(); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect tooltip_rect = GetTooltipWidget()->GetNativeWindow()->bounds(); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(tooltip_rect.IsEmpty()); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shouldn't hide if the mouse is in the tooltip. 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::MouseEvent mouse_event(ui::ET_MOUSE_MOVED, tooltip_rect.CenterPoint(), 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tooltip_rect.CenterPoint(), ui::EF_NONE, 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::EF_NONE); 234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::LocatedEventTestApi test_api(&mouse_event); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetEventTarget(root_window, &mouse_event); 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event_handler->OnMouseEvent(&mouse_event); 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(mouse_event.handled()); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(TooltipIsVisible()); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should hide if the mouse is out of the tooltip. 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_api.set_location(tooltip_rect.origin() + gfx::Vector2d(-1, -1)); 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event_handler->OnMouseEvent(&mouse_event); 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(mouse_event.handled()); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAllPendingInMessageLoop(); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(TooltipIsVisible()); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Checks that tooltip is hidden when mouse is pressed in anywhere. 2504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(ShelfTooltipManagerTest, HideForMouseClickEvent) { 25158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ShowImmediately(); 25258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(TooltipIsVisible()); 25358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* root_window = Shell::GetInstance()->GetPrimaryRootWindow(); 25558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ui::EventHandler* event_handler = GetEventHandler(); 25658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 25758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gfx::Rect tooltip_rect = GetTooltipWidget()->GetNativeWindow()->bounds(); 25858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_FALSE(tooltip_rect.IsEmpty()); 25958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 26058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Should hide if the mouse is pressed in the tooltip. 26158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ui::MouseEvent mouse_event(ui::ET_MOUSE_PRESSED, tooltip_rect.CenterPoint(), 2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tooltip_rect.CenterPoint(), ui::EF_NONE, 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::EF_NONE); 26458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 26558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SetEventTarget(root_window, &mouse_event); 26658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) event_handler->OnMouseEvent(&mouse_event); 26758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE(mouse_event.handled()); 26858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RunAllPendingInMessageLoop(); 26958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE(TooltipIsVisible()); 27058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 27158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Should hide if the mouse is pressed outside of the tooltip. 27258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ShowImmediately(); 27358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(TooltipIsVisible()); 27458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::LocatedEventTestApi test_api(&mouse_event); 27658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) test_api.set_location(tooltip_rect.origin() + gfx::Vector2d(-1, -1)); 27758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 27858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) SetEventTarget(root_window, &mouse_event); 27958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) event_handler->OnMouseEvent(&mouse_event); 28058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE(mouse_event.handled()); 28158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RunAllPendingInMessageLoop(); 28258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_FALSE(TooltipIsVisible()); 28358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 28458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace test 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ash 287