15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "athena/screen/public/screen_manager.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <algorithm> 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <string> 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "athena/test/athena_test_base.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/util/container_priorities.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/aura/test/test_window_delegate.h" 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/aura/window.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/events/test/event_generator.h" 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/wm/core/window_util.h" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)typedef athena::test::AthenaTestBase ScreenManagerTest; 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace athena { 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace { 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const int kTestZOrderPriority = 10; 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)aura::Window* Create(const std::string& name, int z_order_priority) { 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScreenManager::ContainerParams params(name, z_order_priority); 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ScreenManager::Get()->CreateContainer(params); 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)aura::Window* CreateWindow(aura::Window* container, 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) aura::WindowDelegate* delegate, 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const gfx::Rect& bounds) { 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window* window = new aura::Window(delegate); 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) window->SetType(ui::wm::WINDOW_TYPE_NORMAL); 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) window->Init(aura::WINDOW_LAYER_TEXTURED); 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) container->AddChild(window); 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) window->Show(); 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) window->SetBounds(bounds); 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return window; 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void CheckZOrder(aura::Window* w1, aura::Window* w2) { 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window* parent = w1->parent(); 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const aura::Window::Windows& children = parent->children(); 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window::Windows::const_iterator begin_iter = children.begin(); 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window::Windows::const_iterator end_iter = children.end(); 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window::Windows::const_iterator w1_iter = 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::find(begin_iter, end_iter, w1); 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window::Windows::const_iterator w2_iter = 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::find(begin_iter, end_iter, w2); 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_NE(end_iter, w1_iter); 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_NE(end_iter, w2_iter); 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(w1_iter < w2_iter); 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(ScreenManagerTest, CreateContainer) { 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) size_t num_containers = root_window()->children().size(); 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window* container = Create("test", kTestZOrderPriority); 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("test", container->name()); 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const aura::Window::Windows& containers = root_window()->children(); 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(num_containers + 1, containers.size()); 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_NE(containers.end(), 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::find(containers.begin(), containers.end(), container)); 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(ScreenManagerTest, Zorder) { 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window* window_10 = Create("test10", 10); 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window* window_11 = Create("test11", 11); 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window* window_12 = Create("test12", 12); 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SCOPED_TRACE("Init"); 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CheckZOrder(window_10, window_11); 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CheckZOrder(window_11, window_12); 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SCOPED_TRACE("Delete"); 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) delete window_11; 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CheckZOrder(window_10, window_12); 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SCOPED_TRACE("Insert"); 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) window_11 = Create("test11", 11); 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CheckZOrder(window_10, window_11); 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CheckZOrder(window_11, window_12); 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(ScreenManagerTest, NonActivatableContainer) { 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScreenManager::ContainerParams non_activatable( 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "non_activatable", kTestZOrderPriority); 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) non_activatable.can_activate_children = false; 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window* no_activatable_container = 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScreenManager::Get()->CreateContainer(non_activatable); 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScreenManager::ContainerParams activatable( 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "activatable", kTestZOrderPriority + 1); 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) activatable.can_activate_children = true; 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window* activatable_container = 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScreenManager::Get()->CreateContainer(activatable); 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 10603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<aura::Window> window( 10703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CreateWindow(no_activatable_container, NULL, gfx::Rect(0, 0, 100, 100))); 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(wm::CanActivateWindow(window.get())); 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) activatable_container->AddChild(window.get()); 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(wm::CanActivateWindow(window.get())); 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(ScreenManagerTest, GrabInputContainer) { 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScreenManager::ContainerParams normal_params( 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "normal", kTestZOrderPriority); 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) normal_params.can_activate_children = true; 1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window* normal_container = 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScreenManager::Get()->CreateContainer(normal_params); 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::test::EventCountDelegate normal_delegate; 12203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<aura::Window> normal_window(CreateWindow( 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) normal_container, &normal_delegate, gfx::Rect(0, 0, 100, 100))); 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(wm::CanActivateWindow(normal_window.get())); 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) wm::ActivateWindow(normal_window.get()); 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator event_generator(root_window()); 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event_generator.MoveMouseTo(0, 0); 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event_generator.ClickLeftButton(); 1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("1 1", normal_delegate.GetMouseButtonCountsAndReset()); 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event_generator.PressKey(ui::VKEY_A, ui::EF_NONE); 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event_generator.ReleaseKey(ui::VKEY_A, ui::EF_NONE); 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("1 1", normal_delegate.GetKeyCountsAndReset()); 1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScreenManager::ContainerParams grab_params( 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "grabbing", kTestZOrderPriority + 1); 1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) grab_params.can_activate_children = true; 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) grab_params.grab_inputs = true; 1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window* grab_container = 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScreenManager::Get()->CreateContainer(grab_params); 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(wm::CanActivateWindow(normal_window.get())); 1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::test::EventCountDelegate grab_delegate; 14503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<aura::Window> grab_window(CreateWindow( 1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) grab_container, &grab_delegate, gfx::Rect(10, 10, 100, 100))); 1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(wm::CanActivateWindow(grab_window.get())); 1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) wm::ActivateWindow(grab_window.get()); 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // (0, 0) is still on normal_window, but the event should not go there 1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // because grabbing_container prevents it. 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event_generator.MoveMouseTo(0, 0); 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event_generator.ClickLeftButton(); 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("0 0", normal_delegate.GetMouseButtonCountsAndReset()); 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("0 0", grab_delegate.GetMouseButtonCountsAndReset()); 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event_generator.MoveMouseTo(20, 20); 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event_generator.ClickLeftButton(); 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("1 1", grab_delegate.GetMouseButtonCountsAndReset()); 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event_generator.PressKey(ui::VKEY_A, ui::EF_NONE); 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event_generator.ReleaseKey(ui::VKEY_A, ui::EF_NONE); 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("0 0", normal_delegate.GetKeyCountsAndReset()); 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("1 1", grab_delegate.GetKeyCountsAndReset()); 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(ScreenManagerTest, GrabShouldNotBlockVirtualKeyboard) { 1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScreenManager::ContainerParams grab_params("grabbing", kTestZOrderPriority); 1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) grab_params.can_activate_children = true; 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) grab_params.grab_inputs = true; 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window* grab_container = 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScreenManager::Get()->CreateContainer(grab_params); 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::test::EventCountDelegate grab_delegate; 17603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<aura::Window> grab_window( 17703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CreateWindow(grab_container, &grab_delegate, gfx::Rect(0, 0, 100, 100))); 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(wm::CanActivateWindow(grab_window.get())); 1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Create a normal container appearing over the |grab_container|. This is 1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // essentially the case of virtual keyboard. 1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScreenManager::ContainerParams vk_params( 1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "virtual keyboard", kTestZOrderPriority + 1); 1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) vk_params.can_activate_children = true; 1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window* vk_container = ScreenManager::Get()->CreateContainer(vk_params); 1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::test::EventCountDelegate vk_delegate; 18803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<aura::Window> vk_window( 18903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CreateWindow(vk_container, &vk_delegate, gfx::Rect(0, 20, 100, 80))); 1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(wm::CanActivateWindow(vk_window.get())); 1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator event_generator(root_window()); 1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event_generator.MoveMouseTo(10, 25); 1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event_generator.ClickLeftButton(); 1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("0 0", grab_delegate.GetMouseButtonCountsAndReset()); 1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("1 1", vk_delegate.GetMouseButtonCountsAndReset()); 1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(ScreenManagerTest, GrabAndMouseCapture) { 2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScreenManager::ContainerParams normal_params( 2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "normal", kTestZOrderPriority); 2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) normal_params.can_activate_children = true; 2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window* normal_container = 2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScreenManager::Get()->CreateContainer(normal_params); 2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::test::EventCountDelegate normal_delegate; 20703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<aura::Window> normal_window(CreateWindow( 2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) normal_container, &normal_delegate, gfx::Rect(0, 0, 100, 100))); 2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator event_generator(root_window()); 2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event_generator.MoveMouseTo(0, 0); 2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event_generator.PressLeftButton(); 2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Creating grabbing container while mouse pressing. 2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScreenManager::ContainerParams grab_params( 2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "grabbing", kTestZOrderPriority + 1); 2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) grab_params.can_activate_children = true; 2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) grab_params.grab_inputs = true; 2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::Window* grab_container = 2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ScreenManager::Get()->CreateContainer(grab_params); 2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) aura::test::EventCountDelegate grab_delegate; 22303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<aura::Window> grab_window(CreateWindow( 2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) grab_container, &grab_delegate, gfx::Rect(10, 10, 100, 100))); 2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Release event should be sent to |normal_window| because it captures the 2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // mouse event. 2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event_generator.ReleaseLeftButton(); 2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("1 1", normal_delegate.GetMouseButtonCountsAndReset()); 2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("0 0", grab_delegate.GetMouseButtonCountsAndReset()); 2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // After release, further mouse events should not be sent to |normal_window| 2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // because grab_container grabs the input. 2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) event_generator.ClickLeftButton(); 2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("0 0", normal_delegate.GetMouseButtonCountsAndReset()); 2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("0 0", grab_delegate.GetMouseButtonCountsAndReset()); 2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace athena 240