15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 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) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/screen_util.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/root_window_controller.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shelf/shelf_layout_manager.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shelf/shelf_widget.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/shell.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/test/ash_test_base.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/wm/window_util.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/env.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/window.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/aura/window_event_dispatcher.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget_delegate.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)typedef test::AshTestBase ScreenUtilTest; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(ScreenUtilTest, Bounds) { 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateDisplay("600x600,500x500"); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager()-> 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetAutoHideBehavior(ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget* primary = views::Widget::CreateWindowWithContextAndBounds( 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL, CurrentContext(), gfx::Rect(10, 10, 100, 100)); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) primary->Show(); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget* secondary = views::Widget::CreateWindowWithContextAndBounds( 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL, CurrentContext(), gfx::Rect(610, 10, 100, 100)); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) secondary->Show(); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Maximized bounds 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("0,0 600x597", 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ScreenUtil::GetMaximizedWindowBoundsInParent( 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) primary->GetNativeView()).ToString()); 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ("0,0 500x453", 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ScreenUtil::GetMaximizedWindowBoundsInParent( 45b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) secondary->GetNativeView()).ToString()); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Display bounds 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("0,0 600x600", 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ScreenUtil::GetDisplayBoundsInParent( 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) primary->GetNativeView()).ToString()); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("0,0 500x500", 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ScreenUtil::GetDisplayBoundsInParent( 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) secondary->GetNativeView()).ToString()); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Work area bounds 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("0,0 600x597", 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ScreenUtil::GetDisplayWorkAreaBoundsInParent( 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) primary->GetNativeView()).ToString()); 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ("0,0 500x453", 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ScreenUtil::GetDisplayWorkAreaBoundsInParent( 61b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) secondary->GetNativeView()).ToString()); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Test verifies a stable handling of secondary screen widget changes 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// (crbug.com/226132). 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(ScreenUtilTest, StabilityTest) { 677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UpdateDisplay("600x600,500x500"); 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) views::Widget* secondary = views::Widget::CreateWindowWithContextAndBounds( 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NULL, CurrentContext(), gfx::Rect(610, 10, 100, 100)); 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(Shell::GetAllRootWindows()[1], 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) secondary->GetNativeView()->GetRootWindow()); 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) secondary->Show(); 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) secondary->Maximize(); 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) secondary->Show(); 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) secondary->SetFullscreen(true); 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) secondary->Hide(); 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) secondary->Close(); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(ScreenUtilTest, ConvertRect) { 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateDisplay("600x600,500x500"); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget* primary = views::Widget::CreateWindowWithContextAndBounds( 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL, CurrentContext(), gfx::Rect(10, 10, 100, 100)); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) primary->Show(); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::Widget* secondary = views::Widget::CreateWindowWithContextAndBounds( 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL, CurrentContext(), gfx::Rect(610, 10, 100, 100)); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) secondary->Show(); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ( 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "0,0 100x100", 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ScreenUtil::ConvertRectFromScreen( 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) primary->GetNativeView(), gfx::Rect(10, 10, 100, 100)).ToString()); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ( 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "10,10 100x100", 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ScreenUtil::ConvertRectFromScreen( 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) secondary->GetNativeView(), gfx::Rect(620, 20, 100, 100)).ToString()); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ( 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "40,40 100x100", 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ScreenUtil::ConvertRectToScreen( 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) primary->GetNativeView(), gfx::Rect(30, 30, 100, 100)).ToString()); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ( 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "650,50 100x100", 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ScreenUtil::ConvertRectToScreen( 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) secondary->GetNativeView(), gfx::Rect(40, 40, 100, 100)).ToString()); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace test 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ash 117