15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/wm/toplevel_window_event_handler.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/root_window_controller.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shell_window_ids.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/test/ash_test_base.h" 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/wm/lock_state_controller.h" 12ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ash/wm/resize_shadow.h" 13ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ash/wm/resize_shadow_controller.h" 1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ash/wm/window_state.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/wm/window_util.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/wm/workspace_controller.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/message_loop/message_loop.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/client/aura_constants.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/test/aura_test_base.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/test/test_window_delegate.h" 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/aura/window_event_dispatcher.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/hit_test.h" 26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event.h" 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/events/test/event_generator.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/screen.h" 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/wm/core/window_util.h" 30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/wm/public/window_move_client.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Windows headers define macros for these function names which screw with us. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(CreateWindow) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef CreateWindow 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A simple window delegate that returns the specified hit-test code when 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// requested and applies a minimum size constraint if there is one. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestWindowDelegate : public aura::test::TestWindowDelegate { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 48ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch explicit TestWindowDelegate(int hittest_code) { 49ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch set_window_component(hittest_code); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestWindowDelegate() {} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from aura::Test::TestWindowDelegate: 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete this; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestWindowDelegate); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ToplevelWindowEventHandlerTest : public AshTestBase { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ToplevelWindowEventHandlerTest() {} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ToplevelWindowEventHandlerTest() {} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) aura::Window* CreateWindow(int hittest_code) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestWindowDelegate* d1 = new TestWindowDelegate(hittest_code); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) aura::Window* w1 = new aura::Window(d1); 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) w1->SetType(ui::wm::WINDOW_TYPE_NORMAL); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) w1->set_id(1); 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) w1->Init(aura::WINDOW_LAYER_TEXTURED); 74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch aura::Window* parent = Shell::GetContainer( 75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Shell::GetPrimaryRootWindow(), kShellWindowId_AlwaysOnTopContainer); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) parent->AddChild(w1); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) w1->SetBounds(gfx::Rect(0, 0, 100, 100)); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) w1->Show(); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return w1; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DragFromCenterBy(aura::Window* window, int dx, int dy) { 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), window); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.DragMouseBy(dx, dy); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TouchDragFromCenterBy(aura::Window* window, int dx, int dy) { 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), window); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.PressMoveAndReleaseTouchBy(dx, dy); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ToplevelWindowEventHandler> handler_; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ToplevelWindowEventHandlerTest); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, Caption) { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTCAPTION)); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size size = w1->bounds().size(); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(w1.get(), 100, 100); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Position should have been offset by 100,100. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("100,100", w1->bounds().origin().ToString()); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size should not have. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(size.ToString(), w1->bounds().size().ToString()); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TouchDragFromCenterBy(w1.get(), 100, 100); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Position should have been offset by 100,100. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("200,200", w1->bounds().origin().ToString()); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size should not have. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(size.ToString(), w1->bounds().size().ToString()); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, BottomRight) { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOMRIGHT)); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point position = w1->bounds().origin(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(w1.get(), 100, 100); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Position should not have changed. 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(position.ToString(), w1->bounds().origin().ToString()); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size should have increased by 100,100. 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(200, 200).ToString(), w1->bounds().size().ToString()); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, GrowBox) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTGROWBOX)); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestWindowDelegate* window_delegate = 129ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch static_cast<TestWindowDelegate*>(w1->delegate()); 130ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch window_delegate->set_minimum_size(gfx::Size(40, 40)); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point position = w1->bounds().origin(); 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.MoveMouseToCenterOf(w1.get()); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.DragMouseBy(100, 100); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Position should not have changed. 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(position.ToString(), w1->bounds().origin().ToString()); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size should have increased by 100,100. 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(200, 200).ToString(), w1->bounds().size().ToString()); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shrink the wnidow by (-100, -100). 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.DragMouseBy(-100, -100); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Position should not have changed. 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(position.ToString(), w1->bounds().origin().ToString()); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size should have decreased by 100,100. 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(100, 100).ToString(), w1->bounds().size().ToString()); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enforce minimum size. 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.DragMouseBy(-60, -60); 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(position.ToString(), w1->bounds().origin().ToString()); 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(40, 40).ToString(), w1->bounds().size().ToString()); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, Right) { 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTRIGHT)); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point position = w1->bounds().origin(); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(w1.get(), 100, 100); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Position should not have changed. 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(position.ToString(), w1->bounds().origin().ToString()); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size should have increased by 100,0. 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(200, 100).ToString(), w1->bounds().size().ToString()); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, Bottom) { 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOM)); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point position = w1->bounds().origin(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(w1.get(), 100, 100); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Position should not have changed. 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(position.ToString(), w1->bounds().origin().ToString()); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size should have increased by 0,100. 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(100, 200).ToString(), w1->bounds().size().ToString()); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, TopRight) { 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTTOPRIGHT)); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(w1.get(), -50, 50); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Position should have been offset by 0,50. 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Point(0, 50).ToString(), w1->bounds().origin().ToString()); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size should have decreased by 50,50. 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(50, 50).ToString(), w1->bounds().size().ToString()); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, Top) { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTTOP)); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(w1.get(), 50, 50); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Position should have been offset by 0,50. 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Point(0, 50).ToString(), w1->bounds().origin().ToString()); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size should have decreased by 0,50. 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(100, 50).ToString(), w1->bounds().size().ToString()); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, Left) { 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTLEFT)); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(w1.get(), 50, 50); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Position should have been offset by 50,0. 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Point(50, 0).ToString(), w1->bounds().origin().ToString()); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size should have decreased by 50,0. 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(50, 100).ToString(), w1->bounds().size().ToString()); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, BottomLeft) { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOMLEFT)); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(w1.get(), 50, -50); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Position should have been offset by 50,0. 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Point(50, 0).ToString(), w1->bounds().origin().ToString()); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size should have decreased by 50,50. 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(50, 50).ToString(), w1->bounds().size().ToString()); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, TopLeft) { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTTOPLEFT)); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(w1.get(), 50, 50); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Position should have been offset by 50,50. 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Point(50, 50).ToString(), w1->bounds().origin().ToString()); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size should have decreased by 50,50. 2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(50, 50).ToString(), w1->bounds().size().ToString()); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, Client) { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTCLIENT)); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect bounds = w1->bounds(); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(w1.get(), 100, 100); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Neither position nor size should have changed. 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(bounds.ToString(), w1->bounds().ToString()); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, LeftPastMinimum) { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTLEFT)); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestWindowDelegate* window_delegate = 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestWindowDelegate*>(w1->delegate()); 231ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch window_delegate->set_minimum_size(gfx::Size(40, 40)); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a large left-to-right drag. Window width should be clamped to 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // minimum and position change should be limited as well. 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(w1.get(), 333, 0); 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Point(60, 0).ToString(), w1->bounds().origin().ToString()); 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(40, 100).ToString(), w1->bounds().size().ToString()); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, RightPastMinimum) { 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTRIGHT)); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestWindowDelegate* window_delegate = 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestWindowDelegate*>(w1->delegate()); 244ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch window_delegate->set_minimum_size(gfx::Size(40, 40)); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point position = w1->bounds().origin(); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a large right-to-left drag. Window width should be clamped to 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // minimum and position should not change. 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(w1.get(), -333, 0); 2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(position.ToString(), w1->bounds().origin().ToString()); 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(40, 100).ToString(), w1->bounds().size().ToString()); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, TopLeftPastMinimum) { 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTTOPLEFT)); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestWindowDelegate* window_delegate = 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestWindowDelegate*>(w1->delegate()); 258ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch window_delegate->set_minimum_size(gfx::Size(40, 40)); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a large top-left to bottom-right drag. Window width should be 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // clamped to minimum and position should be limited. 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(w1.get(), 333, 444); 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Point(60, 60).ToString(), w1->bounds().origin().ToString()); 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(40, 40).ToString(), w1->bounds().size().ToString()); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, TopRightPastMinimum) { 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTTOPRIGHT)); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestWindowDelegate* window_delegate = 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestWindowDelegate*>(w1->delegate()); 271ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch window_delegate->set_minimum_size(gfx::Size(40, 40)); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a large top-right to bottom-left drag. Window size should be 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // clamped to minimum, x position should not change, and y position should 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be clamped. 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(w1.get(), -333, 444); 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Point(0, 60).ToString(), w1->bounds().origin().ToString()); 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(40, 40).ToString(), w1->bounds().size().ToString()); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, BottomLeftPastMinimum) { 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOMLEFT)); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestWindowDelegate* window_delegate = 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestWindowDelegate*>(w1->delegate()); 285ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch window_delegate->set_minimum_size(gfx::Size(40, 40)); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a large bottom-left to top-right drag. Window size should be 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // clamped to minimum, x position should be clamped, and y position should 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not change. 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(w1.get(), 333, -444); 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Point(60, 0).ToString(), w1->bounds().origin().ToString()); 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(40, 40).ToString(), w1->bounds().size().ToString()); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, BottomRightPastMinimum) { 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOMRIGHT)); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestWindowDelegate* window_delegate = 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestWindowDelegate*>(w1->delegate()); 299ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch window_delegate->set_minimum_size(gfx::Size(40, 40)); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point position = w1->bounds().origin(); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a large bottom-right to top-left drag. Window size should be 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // clamped to minimum and position should not change. 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(w1.get(), -333, -444); 3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(position.ToString(), w1->bounds().origin().ToString()); 3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(gfx::Size(40, 40).ToString(), w1->bounds().size().ToString()); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, BottomRightWorkArea) { 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> target(CreateWindow(HTBOTTOMRIGHT)); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect work_area = Shell::GetScreen()->GetDisplayNearestWindow( 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target.get()).work_area(); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point position = target->bounds().origin(); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Drag further than work_area bottom. 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(target.get(), 100, work_area.height()); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Position should not have changed. 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(position.ToString(), target->bounds().origin().ToString()); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size should have increased by 100, work_area.height() - target->bounds.y() 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ( 3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Size(200, work_area.height() - target->bounds().y()).ToString(), 3215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) target->bounds().size().ToString()); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, BottomLeftWorkArea) { 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> target(CreateWindow(HTBOTTOMLEFT)); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect work_area = Shell::GetScreen()->GetDisplayNearestWindow( 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target.get()).work_area(); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point position = target->bounds().origin(); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Drag further than work_area bottom. 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(target.get(), -30, work_area.height()); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // origin is now at 70, 100. 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(position.x() - 30, target->bounds().x()); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(position.y(), target->bounds().y()); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size should have increased by 30, work_area.height() - target->bounds.y() 3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ( 3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Size(130, work_area.height() - target->bounds().y()).ToString(), 3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) target->bounds().size().ToString()); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, BottomWorkArea) { 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> target(CreateWindow(HTBOTTOM)); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect work_area = Shell::GetScreen()->GetDisplayNearestWindow( 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target.get()).work_area(); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point position = target->bounds().origin(); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Drag further than work_area bottom. 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(target.get(), 0, work_area.height()); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Position should not have changed. 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(position.ToString(), target->bounds().origin().ToString()); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Size should have increased by 0, work_area.height() - target->bounds.y() 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ( 3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Size(100, work_area.height() - target->bounds().y()).ToString(), 3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) target->bounds().size().ToString()); 3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, DontDragIfModalChild) { 3565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow(HTCAPTION)); 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<aura::Window> w2(CreateWindow(HTCAPTION)); 3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) w2->SetBounds(gfx::Rect(100, 0, 100, 100)); 3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) w2->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); 360a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ::wm::AddTransientChild(w1.get(), w2.get()); 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Size size = w1->bounds().size(); 3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Attempt to drag w1, position and size should not change because w1 has a 3645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // modal child. 3655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DragFromCenterBy(w1.get(), 100, 100); 3665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("0,0", w1->bounds().origin().ToString()); 3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(size.ToString(), w1->bounds().size().ToString()); 3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TouchDragFromCenterBy(w1.get(), 100, 100); 3705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("0,0", w1->bounds().origin().ToString()); 3715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(size.ToString(), w1->bounds().size().ToString()); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies we don't let windows drag to a -y location. 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, DontDragToNegativeY) { 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> target(CreateWindow(HTTOP)); 3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), 3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) target.get()); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.MoveMouseTo(0, 5); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.DragMouseBy(0, -5); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The y location and height should not have changed. 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, target->bounds().y()); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(100, target->bounds().height()); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies we don't let windows go bigger than the display width. 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, DontGotWiderThanScreen) { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> target(CreateWindow(HTRIGHT)); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect work_area = Shell::GetScreen()->GetDisplayNearestWindow( 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target.get()).bounds(); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DragFromCenterBy(target.get(), work_area.width() * 2, 0); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The y location and height should not have changed. 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(work_area.width(), target->bounds().width()); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that touch-gestures drag the window correctly. 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, GestureDrag) { 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> target( 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateTestWindowInShellWithDelegate( 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new TestWindowDelegate(HTCAPTION), 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(0, 0, 100, 100))); 4034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) wm::WindowState* window_state = wm::GetWindowState(target.get()); 4045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), 4055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) target.get()); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect old_bounds = target->bounds(); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point location(5, 5); 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) target->SetProperty(aura::client::kCanMaximizeKey, true); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point end = location; 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Snap right; 413a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) end.Offset(100, 0); 414a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) generator.GestureScrollSequence(location, end, 415a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::TimeDelta::FromMilliseconds(5), 416a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 10); 417a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunAllPendingInMessageLoop(); 418a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 419a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Verify that the window has moved after the gesture. 420a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_NE(old_bounds.ToString(), target->bounds().ToString()); 421a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED, window_state->GetStateType()); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) old_bounds = target->bounds(); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Snap left. 426a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) end = location = target->GetBoundsInRootWindow().CenterPoint(); 427a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) end.Offset(-100, 0); 428a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) generator.GestureScrollSequence(location, end, 429a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::TimeDelta::FromMilliseconds(5), 430a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 10); 431a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunAllPendingInMessageLoop(); 432a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 433a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_NE(old_bounds.ToString(), target->bounds().ToString()); 434a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(wm::WINDOW_STATE_TYPE_LEFT_SNAPPED, window_state->GetStateType()); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect bounds_before_maximization = target->bounds(); 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bounds_before_maximization.Offset(0, 100); 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) target->SetBounds(bounds_before_maximization); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) old_bounds = target->bounds(); 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Maximize. 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) end = location = target->GetBoundsInRootWindow().CenterPoint(); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) end.Offset(0, -100); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.GestureScrollSequence(location, end, 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromMilliseconds(5), 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAllPendingInMessageLoop(); 44868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(old_bounds.ToString(), target->bounds().ToString()); 45068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(window_state->IsMaximized()); 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(old_bounds.ToString(), 45268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) window_state->GetRestoreBoundsInScreen().ToString()); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) window_state->Restore(); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target->SetBounds(old_bounds); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Minimize. 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) end = location = target->GetBoundsInRootWindow().CenterPoint(); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) end.Offset(0, 100); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.GestureScrollSequence(location, end, 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromMilliseconds(5), 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAllPendingInMessageLoop(); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(old_bounds.ToString(), target->bounds().ToString()); 46568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(window_state->IsMinimized()); 4665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(window_state->unminimize_to_restore_bounds()); 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(old_bounds.ToString(), 46868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) window_state->GetRestoreBoundsInScreen().ToString()); 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that a gesture cannot minimize a window in login/lock screen. 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, GestureDragMinimizeLoginScreen) { 4734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) LockStateController* state_controller = 4744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Shell::GetInstance()->lock_state_controller(); 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_controller->OnLoginStateChanged(user::LOGGED_IN_NONE); 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_controller->OnLockStateChanged(false); 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetUserLoggedIn(false); 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> target(CreateWindow(HTCAPTION)); 480c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch aura::Window* lock = 481c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch RootWindowController::ForWindow(target.get()) 482c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ->GetContainer(kShellWindowId_LockSystemModalContainer); 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) lock->AddChild(target.get()); 4845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), 4855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) target.get()); 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect old_bounds = target->bounds(); 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point location(5, 5); 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) target->SetProperty(aura::client::kCanMaximizeKey, true); 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point end = location; 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) end.Offset(0, 100); 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator.GestureScrollSequence(location, end, 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta::FromMilliseconds(5), 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10); 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunAllPendingInMessageLoop(); 49668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_FALSE(wm::GetWindowState(target.get())->IsMinimized()); 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, GestureDragToRestore) { 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> window( 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateTestWindowInShellWithDelegate( 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new TestWindowDelegate(HTCAPTION), 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(10, 20, 30, 40))); 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window->Show(); 50668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) wm::WindowState* window_state = wm::GetWindowState(window.get()); 50768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) window_state->Activate(); 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), 5105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) window.get()); 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect old_bounds = window->bounds(); 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point location, end; 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) end = location = window->GetBoundsInRootWindow().CenterPoint(); 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) end.Offset(0, 100); 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator.GestureScrollSequence(location, end, 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta::FromMilliseconds(5), 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10); 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunAllPendingInMessageLoop(); 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(old_bounds.ToString(), window->bounds().ToString()); 52068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(window_state->IsMinimized()); 5215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(window_state->unminimize_to_restore_bounds()); 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(old_bounds.ToString(), 52368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) window_state->GetRestoreBoundsInScreen().ToString()); 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that an unresizable window cannot be dragged or snapped using gestures. 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, GestureDragForUnresizableWindow) { 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> target(CreateWindow(HTCAPTION)); 5294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) wm::WindowState* window_state = wm::GetWindowState(target.get()); 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), 5325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) target.get()); 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect old_bounds = target->bounds(); 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point location(5, 5); 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) target->SetProperty(aura::client::kCanResizeKey, false); 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point end = location; 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Try to snap right. The window is not resizable. So it should not snap. 541a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) end.Offset(100, 0); 542a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) generator.GestureScrollSequence(location, end, 543a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::TimeDelta::FromMilliseconds(5), 544a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 10); 545a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunAllPendingInMessageLoop(); 546a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 547a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Verify that the window has moved after the gesture. 548a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect expected_bounds(old_bounds); 549a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) expected_bounds.Offset(gfx::Vector2d(100, 0)); 550a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(expected_bounds.ToString(), target->bounds().ToString()); 551a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 552a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Verify that the window did not snap left. 553a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(window_state->IsNormalStateType()); 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) old_bounds = target->bounds(); 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Try to snap left. It should not snap. 558a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) end = location = target->GetBoundsInRootWindow().CenterPoint(); 559a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) end.Offset(-100, 0); 560a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) generator.GestureScrollSequence(location, end, 561a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::TimeDelta::FromMilliseconds(5), 562a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 10); 563a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RunAllPendingInMessageLoop(); 564a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 565a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Verify that the window has moved after the gesture. 566a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) expected_bounds = old_bounds; 567a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) expected_bounds.Offset(gfx::Vector2d(-100, 0)); 568a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(expected_bounds.ToString(), target->bounds().ToString()); 569a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 570a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Verify that the window did not snap left. 571a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(window_state->IsNormalStateType()); 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that dragging multiple windows at the same time is not allowed. 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, GestureDragMultipleWindows) { 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> target( 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateTestWindowInShellWithDelegate( 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new TestWindowDelegate(HTCAPTION), 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 0, 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect(0, 0, 100, 100))); 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<aura::Window> notmoved( 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateTestWindowInShellWithDelegate( 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new TestWindowDelegate(HTCAPTION), 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1, gfx::Rect(100, 0, 100, 100))); 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), 5875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) target.get()); 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect old_bounds = target->bounds(); 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point location(5, 5); 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) target->SetProperty(aura::client::kCanMaximizeKey, true); 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Send some touch events to start dragging |target|. 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator.MoveTouch(location); 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator.PressTouch(); 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) location.Offset(40, 5); 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) generator.MoveTouch(location); 5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Try to drag |notmoved| window. This should not move the window. 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect bounds = notmoved->bounds(); 6015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator gen(Shell::GetPrimaryRootWindow(), notmoved.get()); 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point start = notmoved->bounds().origin() + gfx::Vector2d(10, 10); 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point end = start + gfx::Vector2d(100, 10); 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gen.GestureScrollSequence(start, end, 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeDelta::FromMilliseconds(10), 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10); 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(bounds.ToString(), notmoved->bounds().ToString()); 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies pressing escape resets the bounds to the original bounds. 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Disabled crbug.com/166219. 613d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#if defined(OS_WIN) 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_EscapeReverts DISABLED_EscapeReverts 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define MAYBE_EscapeReverts EscapeReverts 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, MAYBE_EscapeReverts) { 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> target(CreateWindow(HTBOTTOMRIGHT)); 6205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), 6215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) target.get()); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.PressLeftButton(); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.MoveMouseBy(10, 11); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Execute any scheduled draws so that pending mouse events are processed. 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAllPendingInMessageLoop(); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("0,0 110x111", target->bounds().ToString()); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.PressKey(ui::VKEY_ESCAPE, 0); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.ReleaseKey(ui::VKEY_ESCAPE, 0); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("0,0 100x100", target->bounds().ToString()); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies window minimization/maximization completes drag. 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Disabled crbug.com/166219. 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_MinimizeMaximizeCompletes DISABLED_MinimizeMaximizeCompletes 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_MinimizeMaximizeCompletes MinimizeMaximizeCompletes 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, MAYBE_MinimizeMaximizeCompletes) { 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Once window is minimized, window dragging completes. 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> target(CreateWindow(HTCAPTION)); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target->Focus(); 6465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), 6475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) target.get()); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.PressLeftButton(); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.MoveMouseBy(10, 11); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAllPendingInMessageLoop(); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("10,11 100x100", target->bounds().ToString()); 65268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) wm::WindowState* window_state = wm::GetWindowState(target.get()); 65368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) window_state->Minimize(); 65468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) window_state->Restore(); 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.PressLeftButton(); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.MoveMouseBy(10, 11); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAllPendingInMessageLoop(); 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("10,11 100x100", target->bounds().ToString()); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Once window is maximized, window dragging completes. 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<aura::Window> target(CreateWindow(HTCAPTION)); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target->Focus(); 6665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), 6675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) target.get()); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.PressLeftButton(); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.MoveMouseBy(10, 11); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAllPendingInMessageLoop(); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("10,11 100x100", target->bounds().ToString()); 67268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) wm::WindowState* window_state = wm::GetWindowState(target.get()); 67368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) window_state->Maximize(); 67468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) window_state->Restore(); 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.PressLeftButton(); 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) generator.MoveMouseBy(10, 11); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunAllPendingInMessageLoop(); 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("10,11 100x100", target->bounds().ToString()); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Verifies that a drag cannot be started via 6845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// aura::client::WindowMoveClient::RunMoveLoop() while another drag is already 6855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// in progress. 6865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(ToplevelWindowEventHandlerTest, RunMoveLoopFailsDuringInProgressDrag) { 6875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<aura::Window> window1(CreateWindow(HTCAPTION)); 6885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("0,0 100x100", window1->bounds().ToString()); 6895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<aura::Window> window2(CreateWindow(HTCAPTION)); 6905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), 6925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) window1.get()); 6935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) window1->Focus(); 6945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator.PressLeftButton(); 6955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator.MoveMouseBy(10, 11); 6965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("10,11 100x100", window1->bounds().ToString()); 6975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::client::WindowMoveClient* move_client = 6995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::client::GetWindowMoveClient(window2->GetRootWindow()); 7005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(aura::client::MOVE_CANCELED, 7015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) move_client->RunMoveLoop(window2.get(), gfx::Vector2d(), 7025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) aura::client::WINDOW_MOVE_SOURCE_MOUSE)); 7035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 7045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) generator.ReleaseLeftButton(); 7055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ("10,11 100x100", window1->bounds().ToString()); 7065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 7075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 708116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace { 709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SendMouseReleaseAndReleaseCapture(ui::test::EventGenerator* generator, 711116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch aura::Window* window) { 712116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch generator->ReleaseLeftButton(); 713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch window->ReleaseCapture(); 714116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 716116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace 717116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 718116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Test that a drag is successful even if ET_MOUSE_CAPTURE_CHANGED is sent 719116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// immediately after the mouse release. views::Widget has this behavior. 720116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(ToplevelWindowEventHandlerTest, CaptureLossAfterMouseRelease) { 721116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<aura::Window> window(CreateWindow(HTNOWHERE)); 7225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), 7235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) window.get()); 724116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch generator.PressLeftButton(); 725116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch window->SetCapture(); 726116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 727116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch aura::client::WindowMoveClient* move_client = 728116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch aura::client::GetWindowMoveClient(window->GetRootWindow()); 729116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::MessageLoopForUI::current()->PostTask( 730116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch FROM_HERE, 731116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&SendMouseReleaseAndReleaseCapture, 732116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Unretained(&generator), 733116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Unretained(window.get()))); 734116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(aura::client::MOVE_SUCCESSFUL, 735116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch move_client->RunMoveLoop(window.get(), gfx::Vector2d(), 736116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch aura::client::WINDOW_MOVE_SOURCE_MOUSE)); 737116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 738116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Showing the resize shadows when the mouse is over the window edges is tested 7408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// in resize_shadow_and_cursor_test.cc 741ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace test 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ash 744